1. 引言

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

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

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

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

2. 實現(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 ]
}

網(wǎng)友評論