1. 引言

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

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

因此,靈活可擴(kuò)展的工作流引擎才是正確姿勢(shì)!下面,我將介紹如何用Crontab來(lái)打造一個(gè)類似于Oozie的簡(jiǎn)易工作流引擎;對(duì)標(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是否已存在,思路比較簡(jiǎn)單——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)友評(píng)論