一 概述
1.1 爲什麼需要工作流調度系統
1.一個完整的數據分析系統通常都是由大量任務單元組成:
shell腳本程序,java程序,mapreduce程序、hive腳本等
2.各任務單元之間存在時間先後及前後依賴關係
3.爲了很好地組織起這樣的複雜執行計劃,需要一個工作流調度系統來調度執行;
例如,我們可能有這樣一個需求,某個業務系統每天產生20G原始數據,我們每天都要對其進行處理,處理步驟如下所示:
(1)通過Hadoop先將原始數據上傳到HDFS上(HDFS的操作);
(2) 使用MapReduce對原始數據進行清洗(MapReduce的操作);
(3) 將清洗後的數據導入到hive表中(hive的導入操作);
(4) 對Hive中多個表的數據進行JOIN處理,得到一張hive的明細表(創建中間表);
(5) 通過對明細表的統計和分析,得到結果報表信息(hive的查詢操作);
1.2 Azkaban的適用場景
根據以上業務場景: (2)任務依賴(1)任務的結果,(3)任務依賴(2)任務的結果,(4)任務依賴(3)任務的結果,(5)任務依賴(4)任務的結果。一般的做法是,先執行完(1)再執行(2),再一次執行(3)(4)(5)。
這樣的話,整個的執行過程都需要人工參加,並且得盯着各任務的進度。但是我們的很多任務都是在深更半夜執行的,通過寫腳本設置crontab執行。其實,整個過程類似於一個有向無環圖(DAG)。每個子任務相當於大任務中的一個節點,也就是,我們需要的就是一個工作流的調度器,而Azkaban就是能解決上述問題的一個調度器。
1.3 什麼是azkaban
Azkaban是由Linkedin公司推出的一個批量工作流任務調度器,主要用於在一個工作流內以一個特定的順序運行一組工作和流程,它的配置是通過簡單的key:value對的方式,通過配置中的dependencies 來設置依賴關係。Azkaban使用job配置文件建立任務之間的依賴關係,並提供一個易於使用的web用戶界面維護和跟蹤你的工作流。
1.4 Azkaban特點
(1) 兼容任何版本的hadoop
(2) 易於使用的Web用戶界面
(3) 簡單的工作流的上傳
(4) 方便設置任務之間的關係
(5) 調度工作流
(6) 模塊化和可插拔的插件機制
(7) 認證/授權(權限的工作)
(8) 能夠殺死並重新啓動工作流
(9) 有關失敗和成功的電子郵件提醒
1.5 常見工作流調度系統
1.簡單的任務調度:直接使用crontab實現;
2.複雜的任務調度:開發調度平臺或使用現成的開源調度系統,比如ooize、azkaban等
1.6 ooize和azkaban特性對比
下面的表格對上述四種hadoop工作流調度器的關鍵特性進行了比較,儘管這些工作流調度器能夠解決的需求場景基本一致,但在設計理念,目標用戶,應用場景等方面還是存在顯著的區別,在做技術選型的時候,可以提供參考
特性 | Oozie | Azkaban |
---|---|---|
工作流描述語言 | XML | text file with key/value pairs |
是否要web容器 | Yes | Yes |
進度跟蹤 | web page | web page |
Hadoop job調度支持 | yes | yes |
運行模式 | daemon | daemon |
事件通知 | no | Yes |
需要安裝 | yes | yes |
支持的hadoop版本 | 0.20+ | currently unknown |
重試支持 | workflownode evel | yes |
運行任意命令 | yes | yes |
####1.7 Azkaban的架構
Azkaban由三個關鍵組件構成:
1.AzkabanWebServer:AzkabanWebServer是整個Azkaban工作流系統的主要管理者,它用戶登錄認證、負責project管理、定時執行工作流、跟蹤工作流執行進度等一系列任務。
2.AzkabanExecutorServer:負責具體的工作流的提交、執行,它們通過mysql數據庫來協調任務的執行。
3.關係型數據庫(MySQL):存儲大部分執行流狀態,AzkabanWebServer和AzkabanExecutorServer都需要訪問數據庫。
1.8 Azkaban下載地址
下載地址:http://azkaban.github.io/downloads.html