公司內(nèi)現(xiàn)在已經(jīng)有團(tuán)隊(duì)在使用Airflow教藻,運(yùn)維UI界面以及對開發(fā)的友好性上貌似都要好于Oozie,本文只針對14年的調(diào)研對比結(jié)果桶现,有空會對比一下兩個(gè)系統(tǒng)
流程
- Java主流程代碼静秆,Shell/Python代碼對主流程調(diào)用,完成控制邏輯
- QA需要分別針對Java主流程代碼測試膊畴,并添加Python代碼的測試
- 增加流程需要修改Python控制邏輯,并做整體邏輯回歸
- Shell/Python代碼的靈活性較高病游,實(shí)現(xiàn)風(fēng)格迥異唇跨,在業(yè)務(wù)變化比較頻繁的情況下,單元測試變化也較大
目標(biāo)
- 能夠增加業(yè)務(wù)調(diào)度的穩(wěn)定性和健壯性和靈活性
- 將重心放在業(yè)務(wù)代碼的實(shí)現(xiàn)上衬衬,通過模塊化买猖、插件化的方案將業(yè)務(wù)接入到調(diào)度系統(tǒng)中
- 支持流程、業(yè)務(wù)模塊的復(fù)用滋尉,減少業(yè)務(wù)平臺的開發(fā)
- 方便PE的運(yùn)維玉控,方便日志的查看,方便版本的更新狮惜、回滾
- 方便日常運(yùn)維的操作高诺,支持對流程的啟停
- 良好的文檔,以及社區(qū)有很好的活躍度碾篡,長期項(xiàng)目
開源系統(tǒng)
Oozie VS Azkaban
架構(gòu)
- Azkaban
- 主要由三個(gè)組件構(gòu)成:AzkabanWebServer(Jetty)薛窥、AzkabanExecutorServer、DataBase(H2/Mysql)
- WebServer是整個(gè)Azkaban工作流系統(tǒng)的主要管理者,負(fù)責(zé)project管理眼姐、用戶登錄認(rèn)證、定時(shí)執(zhí)行工作流佩番、跟蹤工作流執(zhí)行進(jìn)度等
- ExecutorServer主要負(fù)責(zé)任務(wù)的執(zhí)行
Azkaban組件
- Oozie
- 主要部分是Oozie Client众旗、Oozie Server(Tomcat)、DataBase(Debry/Mysql)
- Oozie Client完成對workflow進(jìn)行提交趟畏、查詢贡歧、執(zhí)行
- 實(shí)現(xiàn)
- Ooozie向Oozie Server提交一個(gè)Workflow(job.property),Server端收到后會根據(jù)workflow xml赋秀,提交一個(gè)map only的MR Job
- Job在map task中通過Hadoop JobClient將action對應(yīng)的jar/job.xml提交到JobTracker
- action job未完成前利朵,map only job一直等待
- Oozie server通過callback url通知等待action job的完成
- action job執(zhí)行成功后會將action對應(yīng)的狀態(tài)信息保存到DB中
主要概念
- Azkaban
- Job:最小的執(zhí)行單元,作為DAG的一個(gè)結(jié)點(diǎn)
- Flow:由多個(gè)Job組成猎莲,并通過dependent配置Job的依賴屬性
- Oozie
- Control Node:工作流的開始绍弟、結(jié)束以及決定Workflow的執(zhí)行路徑的節(jié)點(diǎn)(start、end著洼、kill樟遣、decision而叼、fork/join)
- Action Node:工作流執(zhí)行的計(jì)算任務(wù),支持的類型包括(HDFS豹悬、MapReduce葵陵、Java、Shell瞻佛、SSH脱篙、Pig、Hive伤柄、E-Mail绊困、Sub-Workflow、Sqoop响迂、Distcp)
- Workflow:由Control Node以及一系列Action Node組成的工作流
- Coordinator:根據(jù)指定Cron信息觸發(fā)的workflow
- Bundle:按照組的方式批量管理Coordinator任務(wù)考抄,實(shí)現(xiàn)集中的啟停
安裝部署
- Azkaban
- 部署方便:下載解壓,配置連接已有Mysql蔗彤,并啟動(dòng)WebServer和ExecutorServer
- 支持solo-server的模式以及multi-server的模式
- multi-server模式下需要配置mysql川梅、JobType plugin
- 配置用戶權(quán)限
- Oozie
- 部署相對復(fù)雜,需要配置hadoop的core-site.xml文件增加代理用戶的配置然遏,并重啟hadoop集群
- 默認(rèn)使用derby數(shù)據(jù)庫贫途,推薦使用Mysql數(shù)據(jù)庫
- 安裝環(huán)境依賴maven、tomcat待侵、hadoop丢早,同時(shí)需要獨(dú)立安裝extJS包
- 安裝之后需要更新sharelib并初始化數(shù)據(jù)庫,容易出現(xiàn)問題
工作流定義
- Azkaban
- Job和Flow的定義直接通過key-value的屬性文件配置
- Azkaban內(nèi)建支持的兩種JobType只有Shell和Java秧倾,其它的JobType需要以插件的形式接入Azkaban
- 依賴關(guān)系直接通過dependent屬性配置
- Oozie
- 基于hPDL語言描述的配置文件(XML)
- 通過control flow node以及一系列action node確定一個(gè)workflow
- Coordinator有兩種觸發(fā)條件:時(shí)間觸發(fā)怨酝、數(shù)據(jù)觸發(fā)
- 支持參數(shù)化的定義Workflow的配置以及Java EL函數(shù),多種配置傳入的方式
- configure-default.xml
- global域
- configuration域
- job.property
工作流發(fā)布
- Azkaban
- 將用戶定義的job的property配置文件以及依賴的lib都打包在同一個(gè)zip中
- 通過WebUI或者通過ajax接口將zip包提交到WebServer
- 定時(shí)任務(wù)的發(fā)布需要在WebUI上直接設(shè)置
- Oozie
- 將workflow那先、coordinator农猬、bundle的配置以及依賴的lib都放在統(tǒng)一的目錄中,并上傳到hdfs上
- 通過job.property配置指定任務(wù)的hdfs根路徑
- 通過命令行的方式售淡,將workflow提交
WebUI
- Azkaban
- Azkaban所有任務(wù)的提交斤葱、監(jiān)控、執(zhí)行揖闸、編輯都可以通過前端完成
- Oozie
- 只支持Workflow當(dāng)前以及歷史狀態(tài)的查詢
- action的log需要通過oozie提交的hadoop job的日志查看
- cloudera HUE提供了更加nice的UI揍堕,支持oozie任務(wù)查看、編輯汤纸、操作的功能
運(yùn)維
- Azkaban
- 通過Web端可以完成任務(wù)的提交衩茸、編輯、執(zhí)行蹲嚣、查看
- 能夠通過Web端完成任務(wù)的重啟以及暫停
- Oozie
- Oozie原生Web頁面能夠看到工作流的圖形化定義递瑰、log日志祟牲、workflow狀態(tài)以及action的執(zhí)行狀態(tài)
- 通過HUE可以更加方便的在Web頁面上完成workflow的啟動(dòng)、停止抖部、恢復(fù)
日志说贝、監(jiān)控
- Azkaban
- 支持stdout日志的直接輸出,支持配置SLA以及郵件報(bào)警
- Oozie
- stdout日志只能通過點(diǎn)擊oozie啟動(dòng)的mr-job中查看慎颗,ssh action沒法查看stdout日志
- 支持SLA Alters
- 基礎(chǔ)的E-Mail通知乡恕,后續(xù)可以自定義實(shí)現(xiàn)報(bào)警的Action
- 支持JMS API,可以對接JMS provider俯萎,由下游自己獲取狀態(tài)并做報(bào)警傲宜,默認(rèn)可以配置ActiveMQ
擴(kuò)展
- Azkaban
- 非常好的模塊化和插件化的結(jié)構(gòu),支持自定義JobType或者插件夫啊,本身支持的類型并不多
- Oozie
- 可以擴(kuò)展自定義類型的Action
- 支持自定義EL函數(shù)
Oozie方案
使用場景
- 需要按順序并能夠并行處理的工作流(DAG)
- 對運(yùn)行結(jié)果或異常需要報(bào)警函卒、重啟
- 需要Cron的任務(wù)
- 適用于批量處理的任務(wù),不適合實(shí)時(shí)的情況
優(yōu)點(diǎn)
- Oozie與Hadoop生態(tài)系統(tǒng)緊密結(jié)合撇眯,提供做種場景的抽象
- Oozie有更強(qiáng)大的社區(qū)支持报嵌,文檔
- Job提交到hadoop集群,server本身并不啟動(dòng)任何job
- 通過control node/action node能夠覆蓋大多數(shù)的應(yīng)用場景
- Coordinator支持時(shí)間熊榛、數(shù)據(jù)觸發(fā)的啟動(dòng)模式
- 支持參數(shù)化和EL語言定義workflow锚国,方便復(fù)用
- 結(jié)合HUE,能夠方便的對workflow查看以及運(yùn)維
- 結(jié)合HUE玄坦,能夠完成workflow在前端頁面的編輯血筑、提交
- 支持action之間內(nèi)存數(shù)據(jù)的交互(默認(rèn)2K)
- 支持workflow的rerun(從某一個(gè)節(jié)點(diǎn)重啟)
缺點(diǎn)
- 學(xué)習(xí)門檻比較高,需要豐富的Action配置方法煎楣,需要寫大量的XML配置
- 不支持動(dòng)態(tài)的fork豺总,不支持loop
- 應(yīng)用中有動(dòng)態(tài)參數(shù)不好支持