工作流引擎Oozie(二):coordinator
2016-06-13 17:23
274 查看
1. 简介
coordinator是workflow的定时提交器,基于时间条件与数据生成触发(based on time and data triggers)。简单点说,coordinator按所定义的时间周期进行轮询,若数据生成条件满足,则触发workflow任务;否则,则等待数据生成或跳过(调度策略由设置的超时时间决定)。2. 详解
coordinator-app
<coordinator-app name="coord-demo" frequency="${coord:days(1)}" start="${start_time}" end="${end_time}" timezone="Asia/Shanghai" xmlns="uri:oozie:coordinator:0.1">
文件头定义了coordinator任务的名称,执行频率(frequency),开始与起止时间(start、end)。
${coord:days(1)}为coordinator内置的EL function (Expression Language),表示为执行周期为一天。frequency的时间单位为分钟,则
${coord:days(1)}=1440,
${coord:hours(3)}=180. 一般地,在job.properties定义如:start_time=2016-06-07T00:00Z,应以UTC时区为准。
Control information
<controls> <!--超时时间,若为0,一旦数据生成超时则coordinator action被丢弃; 若为-1,则一直等待数据生成; 若 > 0,即为超时时间(单位:分钟)--> <timeout>-1</timeout> <!--并发action数--> <concurrency>1</concurrency> <!--同时被触发的多个coordinator job的执行次序--> <execution>${execution_order}</execution> </controls>
datasets
<datasets> <!--数据生成目录--> <dataset name="data" frequency="${coord:hours(1)}" initial-instance="${start_time}" timezone="${timezone}"> <uri-template>${nameNode}/path/to/${YEAR}-${MONTH}-${DAY}/${HOUR}/</uri-template> <done-flag></done-flag> </dataset> </datasets>
相关参数:
initial-instance,对应初始时间的数据目录,作为时间周期偏移的基准目录
uri-template,文件目录HDFS目录,
${YEAR}、
${MONTH}等为EL Time Constants,具体数值由
<input-events> <data-in ..>传入,也可通过job.properties传入自定义的参数。
done-flag,数据目录生成的文件标识,若未指定,则默认为 _SUCCESS 文件;若指定为空,则表示文件夹本身。
input-events
<input-events> <data-in name="dataReady" dataset="data"> <instance>${coord:current(-1)}</instance> </data-in> </input-events>
定义了数据触发条件,
${coord:current(-1)}表示对于当前时间的偏移,其中偏移量=数值* dataset frequency。有些时候,我们要判断多个目录是否生成,比如,判断一天的24个小时目录,这时应这样写:
<data-in name="dataReady2" dataset="data"> <start-instance>${coord:current(-24)}</start-instance> <end-instance>${coord:current(-1)}</end-instance> </data-in>
action
<action> <workflow> <app-path>${wf_app_path}</app-path> <configuration> <property> <name>dayTime</name> <value>${coord:formatTime(coord:dateOffset(coord:nominalTime(), -1, 'DAY'), 'yyyy-MM-dd')}</value> </property> </configuration> </workflow> </action>
定义coordinator要触发的workflow,
app-path,workflow所在的HDFS目录;
property,定义传给workflow的参数
coordinator提供了一些用于时间计算的函数,比如:
coord:nominalTime(),返回coordinator的每一执行周期的当前时间;
coord:dateOffset(String baseDate, int instance, String timeUnit),计算偏移后的时间,newDate = baseDate + instance * timeUnit;
coord:formatTime(String ts, String format),定义格式化的时间,其中format应遵循Java's SimpleDateFormat。
返回多个时间:
<value>${coord:formatTime(coord:dateOffset(coord:dateOffset(coord:nominalTime(), -12, 'HOUR'), -6, 'DAY'), 'yyyy-MM-dd')},${coord:formatTime(coord:dateOffset(coord:dateOffset(coord:nominalTime(), -12, 'HOUR'), -5, 'DAY')</value>
相关文章推荐
- tableView 代理与数据源的抽离,减少与 controller的耦合
- 欢迎使用CSDN-markdown编辑器
- Swift-基础-2
- Android Studio(AS)-->导入项目
- AD域控制器所有使用的端口明细列表
- msp430单片机通过串口向上位机发送浮点数
- 多线程编程注意点
- Android Studio(AS)-->导入项目
- Log4net按照不同级别写入多个日志文件
- BZOJ 2521 最小生成树(最小割)
- Qt Style Sheets Reference 笔记
- axis2 https is forbidden
- vim中批量注释与解注释python代码
- 通用的BaseActivity--android技术储备
- 把宏添加到自定义Ribbon并在所有Excel里运行它的方法
- 定时出票
- java类型占用字节数&类型转换
- 对话架构师:亿级短视频社交「美拍」架构实战
- 开源项目学习(微阅)
- 人生中的十个不要等(摘录于互联网)