1、為什么需要工作流調(diào)度系統(tǒng)
1)一個(gè)完整的數(shù)據(jù)分析系統(tǒng)通常都是由大量任務(wù)單元組成:
shell腳本程序,java程序,mapreduce程序、hive腳本等
2)各任務(wù)單元之間存在時(shí)間先后及前后依賴關(guān)系
3)為了很好地組織起這樣的復(fù)雜執(zhí)行計(jì)劃,需要一個(gè)工作流調(diào)度系統(tǒng)來調(diào)度執(zhí)行;
例如,我們可能有這樣一個(gè)需求,某個(gè)業(yè)務(wù)系統(tǒng)每天產(chǎn)生20G原始數(shù)據(jù),我們每天都要對(duì)其進(jìn)行處理,處理步驟如下所示:
(1)通過Hadoop先將原始數(shù)據(jù)上傳到HDFS上(HDFS的操作);
(2)使用MapReduce對(duì)原始數(shù)據(jù)進(jìn)行清洗(MapReduce的操作);
(3)將清洗后的數(shù)據(jù)導(dǎo)入到hive表中(hive的導(dǎo)入操作);
(4)對(duì)Hive中多個(gè)表的數(shù)據(jù)進(jìn)行JOIN處理,得到一張hive的明細(xì)表(創(chuàng)建中間表);
(5)通過對(duì)明細(xì)表的統(tǒng)計(jì)和分析,得到結(jié)果報(bào)表信息(hive的查詢操作);

2、Azkaban的適用場(chǎng)景
根據(jù)以上業(yè)務(wù)場(chǎng)景:(2)任務(wù)依賴(1)任務(wù)的結(jié)果,(3)任務(wù)依賴(2)任務(wù)的結(jié)果,(4)任務(wù)依賴(3)任務(wù)的結(jié)果,(5)任務(wù)依賴(4)任務(wù)的結(jié)果。一般的做法是,先執(zhí)行完(1)再執(zhí)行(2),再一次執(zhí)行(3)(4)(5)。
這樣的話,整個(gè)的執(zhí)行過程都需要人工參加,并且得盯著各任務(wù)的進(jìn)度。但是我們的很多任務(wù)都是在深更半夜執(zhí)行的,通過寫腳本設(shè)置crontab執(zhí)行。其實(shí),整個(gè)過程類似于一個(gè)有向無環(huán)圖(DAG)。每個(gè)子任務(wù)相當(dāng)于大任務(wù)中的一個(gè)節(jié)點(diǎn),也就是,我們需要的就是一個(gè)工作流的調(diào)度器,而Azkaban就是能解決上述問題的一個(gè)調(diào)度器。
3、什么是azkaban
Azkaban是由Linkedin公司推出的一個(gè)批量工作流任務(wù)調(diào)度器,主要用于在一個(gè)工作流內(nèi)以一個(gè)特定的順序運(yùn)行一組工作和流程,它的配置是通過簡單的key:value對(duì)的方式,通過配置中的dependencies 來設(shè)置依賴關(guān)系。Azkaban使用job配置文件建立任務(wù)之間的依賴關(guān)系,并提供一個(gè)易于使用的web用戶界面維護(hù)和跟蹤你的工作流。
4、Azkaban特點(diǎn)
1)兼容任何版本的hadoop
2)易于使用的Web用戶界面
3)簡單的工作流的上傳
4)方便設(shè)置任務(wù)之間的關(guān)系
5)調(diào)度工作流
6)模塊化和可插拔的插件機(jī)制
7)認(rèn)證/授權(quán)(權(quán)限的工作)
8)能夠殺死并重新啟動(dòng)工作流
9)有關(guān)失敗和成功的電子郵件提醒
5、常見工作流調(diào)度系統(tǒng)
1)簡單的任務(wù)調(diào)度:直接使用crontab實(shí)現(xiàn);
2)復(fù)雜的任務(wù)調(diào)度:開發(fā)調(diào)度平臺(tái)或使用現(xiàn)成的開源調(diào)度系統(tǒng),比如ooize、azkaban等
6、ooize和azkaban特性對(duì)比
下面的表格對(duì)上述四種hadoop工作流調(diào)度器的關(guān)鍵特性進(jìn)行了比較,盡管這些工作流調(diào)度器能夠解決的需求場(chǎng)景基本一致,但在設(shè)計(jì)理念,目標(biāo)用戶,應(yīng)用場(chǎng)景等方面還是存在顯著的區(qū)別,在做技術(shù)選型的時(shí)候,可以提供參考
| 特性 | Oozie | Azkaban |
|---|---|---|
| 工作流描述語言 | XML | text file with key/value pairs |
| 是否要web容器 | Yes | Yes |
| 進(jìn)度跟蹤 | web page | web page |
| Hadoop job調(diào)度支持 | yes | yes |
| 運(yùn)行模式 | daemon | daemon |
| 事件通知 | no | Yes |
| 需要安裝 | yes | yes |
| 支持的hadoop版本 | 0.20+ | currently unknown |
| 重試支持 | workflownode evel | yes |
| 運(yùn)行任意命令 | yes | yes |
7、Azkaban的架構(gòu)
Azkaban由三個(gè)關(guān)鍵組件構(gòu)成

1)AzkabanWebServer:AzkabanWebServer是整個(gè)Azkaban工作流系統(tǒng)的主要管理者,它用戶登錄認(rèn)證、負(fù)責(zé)project管理、定時(shí)執(zhí)行工作流、跟蹤工作流執(zhí)行進(jìn)度等一系列任務(wù)。
2)AzkabanExecutorServer:負(fù)責(zé)具體的工作流的提交、執(zhí)行,它們通過mysql數(shù)據(jù)庫來協(xié)調(diào)任務(wù)的執(zhí)行。
3)關(guān)系型數(shù)據(jù)庫(MySQL):存儲(chǔ)大部分執(zhí)行流狀態(tài),AzkabanWebServer和AzkabanExecutorServer都需要訪問數(shù)據(jù)庫。
8、Azkaban下載地址
http://azkaban.github.io/downloads.html
https://azkaban.github.io/