共计 2695 个字符,预计需要花费 7 分钟才能阅读完成。
这篇文章主要介绍“Oozie 的 coordinator 怎么配置”,在日常操作中,相信很多人在 Oozie 的 coordinator 怎么配置问题上存在疑惑,丸趣 TV 小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Oozie 的 coordinator 怎么配置”的疑惑有所帮助!接下来,请跟着丸趣 TV 小编一起来学习吧!
coordinator 是 workflow 的定时提交器,基于时间条件与数据生成触发(based on time and data triggers)。简单点说,coordinator 按所定义的时间周期进行轮询,若数据生成条件满足,则触发 workflow 任务;否则,则等待数据生成或跳过(调度策略由设置的超时时间决定)。
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,具体数值由 传入,也可通过 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
到此,关于“Oozie 的 coordinator 怎么配置”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注丸趣 TV 网站,丸趣 TV 小编会继续努力为大家带来更多实用的文章!