Azkaban是什么?(一)
不多說,直接上干貨!
http://www.cnblogs.com/zlslch/category/938837.html
目前,市面上最流行的兩種Hadoop工作流引擎調度器Azkaban與Oozie。
具體,可以進一步看我的博客。
Azkaban概念學習系列http://www.cnblogs.com/zlslch/category/938837.html
和Oozie概念學習系列http://www.cnblogs.com/zlslch/category/916607.html
下面的表格對上述2種hadoop工作流調度器的關鍵特性進行了比較,盡管這些工作流調度器能夠解決的需求場景基本一致,但在設計理念,目標用戶,應用場景等方面還是存在區別。
特性 |
Oozie |
Azkaban |
工作流描述語言 |
XML (xPDL based) |
text file with key/value pairs |
依賴機制 |
explicit |
explicit |
是否要web容器 |
Yes |
Yes |
進度跟蹤 |
web page |
web page |
Hadoop job調度支持 |
yes |
yes |
運行模式 |
daemon |
daemon |
Pig支持 |
yes |
yes |
事件通知 |
no |
no |
需要安裝 |
yes |
yes |
支持的hadoop版本 |
0.20+ |
currently unknown |
重試支持 |
workflownode evel |
yes |
運行任意命令 |
yes |
yes |
Amazon EMR支持 |
no |
currently unknown |
Azkaban與Oozie對比
對市面上最流行的兩種調度器,給出以下詳細對比。知名度比較高的應該是Apache Oozie,但是其配置工作流的過程是編寫大量的XML配置,而且代碼復雜度比較高,不易於二次開發。ooize相比azkaban是一個重量級的任務調度系統,功能全面,但配置使用也更復雜。如果可以不在意某些功能的缺失,輕量級調度器azkaban是很不錯的候選對象。
從功能上來對比
兩者均可以調度linux命令、mapreduce、spark、pig、java、hive、java程序、腳本工作流任務
兩者均可以定時執行工作流任務
從工作流定義上來對比
1、Azkaban使用Properties文件定義工作流
2、Oozie使用XML文件定義工作流
從工作流傳參上來對比
1、Azkaban支持直接傳參,例如${input}
2、Oozie支持參數和EL表達式,例如${fs:dirSize(myInputDir)}
從定時執行上來對比
1、Azkaban的定時執行任務是基於時間的
2、Oozie的定時執行任務基於時間和輸入數據
從資源管理上來對比
1、Azkaban有較嚴格的權限控制,如用戶對工作流進行讀/寫/執行等操作
2、Oozie暫無嚴格的權限控制
從工作流執行上來對比
1、Azkaban有三種運行模式:
1.1、solo server mode:最簡單的模式,數據庫內置的H2數據庫,管理服務器和執行服務器都在一個進程中運行,任務量不大項目可以采用此模式。
1.2、 two server mode:數據庫為mysql,管理服務器和執行服務器在不同進程,這種模式下,管理服務器和執行服務器互不影響
1.3 、multiple executor mode:該模式下,執行服務器和管理服務器在不同主機上,且執行服務器可以有多個
我這次采用第二種模式,管理服務器、執行服務器分進程,但在同一台主機上。
2、Oozie作為工作流服務器運行,支持多用戶和多工作流
從工作流管理上來對比
1、Azkaban支持瀏覽器以及ajax方式操作工作流
2、Oozie支持命令行、HTTP REST、Java API、瀏覽器操作工作流
另一版本區別:
兩者在功能方面大致相同,只是Oozie底層在提交Hadoop Spark作業是通過org.apache.hadoop的封裝好的接口進行提交,而Azkaban可以直接操作shell語句。在安全性上可能Oozie會比較好。
工作流定義:Oozie是通過xml定義的而Azkaban為properties來定義。
部署過程: Oozie的部署太虐心了。有點難。同時它是從Yarn上拉任務日志。
Azkaban中如果有任務出現失敗,只要進程有效執行,那么任務就算執行成功,這是BUG,但是Oozie能有效的檢測任務的成功與失敗。
操作工作流:Azkaban使用Web操作。Oozie支持Web,RestApi,Java API操作。
權限控制: Oozie基本無權限控制,Azkaban有較完善的權限控制,入用戶對工作流讀寫執行操作。
Oozie的action主要運行在hadoop中而Azkaban的actions運行在Azkaban的服務器中。
記錄workflow的狀態:Azkaban將正在執行的workflow狀態保存在內存中,Oozie將其保存在Mysql中。
出現失敗的情況:Azkaban會丟失所有的工作流,但是Oozie可以在繼續失敗的工作流運行。