1. 引言

眾所周知,Oozie(12)是基于時(shí)間條件與數(shù)據(jù)生成來做工作流調(diào)度的,但是Oozie的數(shù)據(jù)觸發(fā)條件只支持HDFS路徑,故而面臨著這樣的問題:

  • 無法判斷Hive partition是否已存在;
  • 無法判斷Elasticsearch index是否已寫入完成;
  • ...

因此,靈活可擴(kuò)展的工作流引擎才是正確姿勢!下面,我將介紹如何用Crontab來打造一個(gè)類似于Oozie的簡易工作流引擎;對標(biāo)Oozie,其應(yīng)滿足功能:

  • 時(shí)間條件與數(shù)據(jù)生成觸發(fā)任務(wù),如Oozie coordinator的datasets與input-events;
  • 支持觸發(fā)條件的輪詢;
  • 支持任務(wù)并行執(zhí)行,如Oozie workflow的fork與join;
  • 捕獲錯(cuò)誤及運(yùn)行狀態(tài)日志。

2. 實(shí)現(xiàn)

觸發(fā)條件

判斷Hive partition是否已存在,思路比較簡單——show partitions <tb_name>后能否grep到該partition:

# check wheter $1's partition ($2) exists hive_partition_exists() {
    table_name=$1
    partition=$2
    hive -e "show partitions ${table_name}" | grep ${partition}
    [ $? == 0 ]
}

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式