|
目錄 正文 一、為什么需要工作流調(diào)度器
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)來(lái)調(diào)度執(zhí)行
例如,我們可能有這樣一個(gè)需求,某個(gè)業(yè)務(wù)系統(tǒng)每天產(chǎn)生 20G 原始數(shù)據(jù),我們每天都要對(duì)其進(jìn)行處理,處理步驟如下所示:
1、 通過(guò) Hadoop 先將原始數(shù)據(jù)同步到 HDFS 上;
2、 借助 MapReduce 計(jì)算框架對(duì)原始數(shù)據(jù)進(jìn)行清洗轉(zhuǎn)換,生成的數(shù)據(jù)以分區(qū)表的形式存儲(chǔ) 到多張 Hive 表中;
3、 需要對(duì) Hive 中多個(gè)表的數(shù)據(jù)進(jìn)行 JOIN 處理,得到一個(gè)明細(xì)數(shù)據(jù) Hive 大表;
4、 將明細(xì)數(shù)據(jù)進(jìn)行各種統(tǒng)計(jì)分析,得到結(jié)果報(bào)表信息;
5、 需要將統(tǒng)計(jì)分析得到的結(jié)果數(shù)據(jù)同步到業(yè)務(wù)系統(tǒng)中,供業(yè)務(wù)調(diào)用使用。
二、工作流調(diào)度實(shí)現(xiàn)方式
簡(jiǎn)單的任務(wù)調(diào)度:直接使用 linux 的 crontab 來(lái)定義;
復(fù)雜的任務(wù)調(diào)度:開發(fā)調(diào)度平臺(tái)或使用現(xiàn)成的開源調(diào)度系統(tǒng),比如 ooize、azkaban 等
三、常見工作流調(diào)度系統(tǒng)
市面上目前有許多工作流調(diào)度器 在 hadoop 領(lǐng)域,常見的工作流調(diào)度器有 Oozie, Azkaban,Cascading,Hamake 等
四、各種調(diào)度工具對(duì)比
下面的表格對(duì)上述四種 hadoop 工作流調(diào)度器的關(guān)鍵特性進(jìn)行了比較,盡管這些工作流調(diào)度 器能夠解決的需求場(chǎng)景基本一致,但在設(shè)計(jì)理念,目標(biāo)用戶,應(yīng)用場(chǎng)景等方面還是存在顯著 的區(qū)別,在做技術(shù)選型的時(shí)候,可以提供參考
| 特性 | Hamake | Oozie | Azkaban | Cascading |
| 工作流描述語(yǔ)言 |
XML |
XML (xPDL based) |
text file with key/value pairs |
Java API |
| 依賴機(jī)制 |
data-driven |
explicit |
explicit |
explicit |
| 是否要web容器 |
NO |
YES |
YES |
NO |
| 進(jìn)度跟蹤 |
console/log messages |
web page |
web page |
Java API |
| Hadoop job調(diào)度支持 |
no |
YES |
YES |
YES |
| 運(yùn)行模式 |
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 |
| 運(yùn)行任意命令 |
yes |
yes |
yes |
yes |
| Amazon EMR支持 |
yes |
no |
currently unknown |
yes |
五、Azkaban 與 Oozie 對(duì)比
對(duì)市面上最流行的兩種調(diào)度器,給出以下詳細(xì)對(duì)比,以供技術(shù)選型參考??傮w來(lái)說(shuō),ooize相比azkaban是一個(gè)重量級(jí)的任務(wù)調(diào)度系統(tǒng),功能全面,但配置使用也更復(fù)雜。如果可以不在意某些功能的缺失,輕量級(jí)調(diào)度器azkaban是很不錯(cuò)的候選對(duì)象。 詳情如下:
功能
兩者均可以調(diào)度mapreduce,pig,java,腳本工作流任務(wù) 兩者均可以定時(shí)執(zhí)行工作流任務(wù)
工作流定義
Azkaban使用Properties文件定義工作流 Oozie使用XML文件定義工作流
工作流傳參
Azkaban支持直接傳參,例如inputOozie支持參數(shù)和EL表達(dá)式,例如inputOozie支持參數(shù)和EL表達(dá)式,例如{fs:dirSize(myInputDir)}
定時(shí)執(zhí)行
Azkaban的定時(shí)執(zhí)行任務(wù)是基于時(shí)間的 Oozie的定時(shí)執(zhí)行任務(wù)基于時(shí)間和輸入數(shù)據(jù)
資源管理
Azkaban有較嚴(yán)格的權(quán)限控制,如用戶對(duì)工作流進(jìn)行讀/寫/執(zhí)行等操作 Oozie暫無(wú)嚴(yán)格的權(quán)限控制
工作流執(zhí)行
Azkaban有兩種運(yùn)行模式,分別是solo server mode(executor server和web server部署在同一臺(tái)節(jié)點(diǎn))和multi server mode(executor server和web server可以部署在不同節(jié)點(diǎn)) Oozie作為工作流服務(wù)器運(yùn)行,支持多用戶和多工作流
工作流管理
Azkaban支持瀏覽器以及ajax方式操作工作流 Oozie支持命令行、HTTP REST、Java API、瀏覽器操作工作流
六、Azkaban 介紹
Azkaban是由Linkedin開源的一個(gè)批量工作流任務(wù)調(diào)度器。用于在一個(gè)工作流內(nèi)以一個(gè)特定的順序運(yùn)行一組工作和流程。Azkaban定義了一種KV文件格式來(lái)建立任務(wù)之間的依賴關(guān)系,并提供一個(gè)易于使用的web用戶界面維護(hù)和跟蹤你的工作流。 它有如下功能特點(diǎn): 1、Web用戶界面 2、方便上傳工作流 3、方便設(shè)置任務(wù)之間的關(guān)系 4、調(diào)度工作流 5、認(rèn)證/授權(quán)(權(quán)限的工作) 6、能夠殺死并重新啟動(dòng)工作流 7、模塊化和可插拔的插件機(jī)制 8、項(xiàng)目工作區(qū) 9、工作流和任務(wù)的日志記錄和審計(jì)
七、azkaban調(diào)度的任務(wù)有可能有那些類型
1、shell腳本
2、java程序
3、MR程序
4、spark程序
5、hive的sql
6、python腳本
7、sqoop任務(wù)
|