一、一個完整的數據分析系統一般都是由大量任務單元組成: shell 腳本程序,java 程序,mapreduce 程序、hive 腳本等java
二、各任務單元之間存在時間前後及先後依賴關係node
三、爲了很好地組織起這樣的複雜執行計劃,須要一個工做流調度系統來調度執行python
例如,咱們可能有這樣一個需求,某個業務系統天天產生 20G 原始數據,咱們天天都要對其進行處理,處理步驟以下所示:linux
一、 經過 Hadoop 先將原始數據同步到 HDFS 上;web
二、 藉助 MapReduce 計算框架對原始數據進行清洗轉換,生成的數據以分區表的形式存儲 到多張 Hive 表中;ajax
三、 須要對 Hive 中多個表的數據進行 JOIN 處理,獲得一個明細數據 Hive 大表;sql
四、 將明細數據進行各類統計分析,獲得結果報表信息;shell
五、 須要將統計分析獲得的結果數據同步到業務系統中,供業務調用使用。瀏覽器
簡單的任務調度:直接使用 linux 的 crontab 來定義;服務器
複雜的任務調度:開發調度平臺或使用現成的開源調度系統,好比 ooize、azkaban 等
市面上目前有許多工做流調度器 在 hadoop 領域,常見的工做流調度器有 Oozie, Azkaban,Cascading,Hamake 等
下面的表格對上述四種 hadoop 工做流調度器的關鍵特性進行了比較,儘管這些工做流調度 器可以解決的需求場景基本一致,但在設計理念,目標用戶,應用場景等方面仍是存在顯著 的區別,在作技術選型的時候,能夠提供參考
特性 | Hamake | Oozie | Azkaban | Cascading |
---|---|---|---|---|
工做流描述語言 | XML | XML (xPDL based) | text file with key/value pairs | Java API |
依賴機制 | data-driven | explicit | explicit | explicit |
是否要web容器 | NO | YES | YES | NO |
進度跟蹤 | console/log messages | web page | web page | Java API |
Hadoop job調度支持 | no | YES | YES | YES |
運行模式 | command line utility | daemon | daemon | API |
Pig支持 | yes | yes | yes | yes |
事件通知 | no | no | no | yes |
須要安裝 | no | yes | yes | no |
支持的hadoop版本 | 0.18+ | 0.20+ | currently unknown | 0.18+ |
重試支持 | no | workflownode evel | yes | yes |
運行任意命令 | yes | yes | yes | yes |
Amazon EMR支持 | yes | no | currently unknown | yes |
對市面上最流行的兩種調度器,給出如下詳細對比,以供技術選型參考。整體來講,ooize相比azkaban是一個重量級的任務調度系統,功能全面,但配置使用也更復雜。若是能夠不在乎某些功能的缺失,輕量級調度器azkaban是很不錯的候選對象。
詳情以下:
二者都可以調度mapreduce,pig,java,腳本工做流任務
二者都可以定時執行工做流任務
Azkaban使用Properties文件定義工做流
Oozie使用XML文件定義工做流
Azkaban支持直接傳參,例如inputOozie支持參數和EL表達式,例如inputOozie支持參數和EL表達式,例如{fs:dirSize(myInputDir)}
Azkaban的定時執行任務是基於時間的
Oozie的定時執行任務基於時間和輸入數據
Azkaban有較嚴格的權限控制,如用戶對工做流進行讀/寫/執行等操做
Oozie暫無嚴格的權限控制
Azkaban有兩種運行模式,分別是solo server mode(executor server和web server部署在同一臺節點)和multi server mode(executor server和web server能夠部署在不一樣節點)
Oozie做爲工做流服務器運行,支持多用戶和多工做流
Azkaban支持瀏覽器以及ajax方式操做工做流
Oozie支持命令行、HTTP REST、Java API、瀏覽器操做工做流
Azkaban是由Linkedin開源的一個批量工做流任務調度器。用於在一個工做流內以一個特定的順序運行一組工做和流程。Azkaban定義了一種KV文件格式來創建任務之間的依賴關係,並提供一個易於使用的web用戶界面維護和跟蹤你的工做流。
它有以下功能特色:
一、Web用戶界面
二、方便上傳工做流
三、方便設置任務之間的關係
四、調度工做流
五、認證/受權(權限的工做)
六、可以殺死並從新啓動工做流
七、模塊化和可插拔的插件機制
八、項目工做區
九、工做流和任務的日誌記錄和審計
一、shell腳本
二、java程序
三、MR程序
四、spark程序
五、hive的sql
六、python腳本
七、sqoop任務