1. 引言
众所周知,Oozie(1, 2)是基于时间条件与数据生成来做工作流调度的,但是Oozie的数据触发条件只支持HDFS路径,故而面临着这样的问题:
- 无法判断Hive partition是否已存在;
- 无法判断Elasticsearch index是否已写入完成;
- ...
因此,灵活可扩展的工作流引擎才是正确姿势!下面,我将介绍如何用Crontab来打造一个类似于Oozie的简易工作流引擎;对标Oozie,其应满足功能:
- 时间条件与数据生成触发任务,如Oozie coordinator的
datasets
与input-events
; - 支持触发条件的轮询;
- 支持任务并行执行,如Oozie workflow的
fork
与join
; - 捕获错误及运行状态日志。