工作流調(diào)研 oozie vs azkaban

公司內(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ù)不好支持
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市择懂,隨后出現(xiàn)的幾起案子园欣,更是在濱河造成了極大的恐慌,老刑警劉巖休蟹,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異日矫,居然都是意外死亡赂弓,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門哪轿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盈魁,“玉大人,你說我怎么就攤上這事窃诉⊙畎遥” “怎么了赤套?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長珊膜。 經(jīng)常有香客問我容握,道長,這世上最難降的妖魔是什么车柠? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任剔氏,我火速辦了婚禮,結(jié)果婚禮上竹祷,老公的妹妹穿的比我還像新娘谈跛。我一直安慰自己,他們只是感情好塑陵,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布感憾。 她就那樣靜靜地躺著,像睡著了一般令花。 火紅的嫁衣襯著肌膚如雪阻桅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天彭则,我揣著相機(jī)與錄音鳍刷,去河邊找鬼。 笑死俯抖,一個(gè)胖子當(dāng)著我的面吹牛输瓜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播芬萍,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼尤揣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了柬祠?” 一聲冷哼從身側(cè)響起北戏,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎漫蛔,沒想到半個(gè)月后嗜愈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡莽龟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年蠕嫁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片毯盈。...
    茶點(diǎn)故事閱讀 40,503評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡剃毒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情赘阀,我是刑警寧澤益缠,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站基公,受9級特大地震影響幅慌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜酌媒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一欠痴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧秒咨,春花似錦喇辽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至陡厘,卻和暖如春抽米,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背糙置。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工云茸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人谤饭。 一個(gè)月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓标捺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親揉抵。 傳聞我的和親對象是個(gè)殘疾皇子亡容,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 自定義實(shí)現(xiàn)wordcount的workflow 在yarn上測試wordcount程序 生產(chǎn)一個(gè)應(yīng)用目錄,并把wo...
    心_的方向閱讀 7,891評論 2 4
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理冤今,服務(wù)發(fā)現(xiàn)闺兢,斷路器,智...
    卡卡羅2017閱讀 134,699評論 18 139
  • 為什么需要任務(wù)調(diào)度框架 在進(jìn)行數(shù)據(jù)處理的時(shí)候戏罢,需要進(jìn)行數(shù)據(jù)采集屋谭、數(shù)據(jù)清洗、數(shù)據(jù)分析等操作龟糕,每一個(gè)過程都可能涉及到多...
    心_的方向閱讀 6,220評論 1 6
  • 自從公司樓下開了電影院戴而,看電影真的是越來越方便了。??整體來說翩蘸,電影真的不錯(cuò)的。劇情嘛淮逊,永遠(yuǎn)是軟肋催首。但這種動(dòng)作片扶踊,你...
    LoVe_La_Vie閱讀 531評論 0 0
  • 從初中開始就有人說我長得像貓,可能是胖嘟嘟的原因吧郎任。上了大學(xué)也不記得貓咪這個(gè)外號是從哪里出來的秧耗,開始還會很排斥,畢...
    6d4a812edf45閱讀 493評論 2 1