1. 引言
众所周知,Oozie(1, 2)是基于时间条件与数据生成来做工作流调度的,但是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 ]
}

