1. 引言

众所周知,Oozie(12)是基于时间条件与数据生成来做工作流调度的,但是Oozie的数据触发条件只支持HDFS路径,故而面临着这样的问题:

  • 无法判断Hive partition是否已存在;
  • 无法判断Elasticsearch index是否已写入完成;
  • ...

因此,灵活可扩展的工作流引擎才是正确姿势!下面,我将介绍如何用Crontab来打造一个类似于Oozie的简易工作流引擎;对标Oozie,其应满足功能:

  • 时间条件与数据生成触发任务,如Oozie coordinator的datasets与input-events;
  • 支持触发条件的轮询;
  • 支持任务并行执行,如Oozie workflow的fork与join;
  • 捕获错误及运行状态日志。

2. 实现

触发条件

判断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 ]
}

网友评论