• 工作流引擎Oozie(二):coordinator


    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>


    参考
    :http://www.cnblogs.com/en-heng/p/5581331.html

      Oozie Coordinator使用及详解

    http://shiyanjun.cn/archives/684.html
    http://blog.csdn.net/oracle8090/article/details/54666543
  • 相关阅读:
    LGPrep的一点小问题
    百度地图API的事件处理:覆盖物阻止冒泡
    HTML5截取视频第一帧作为预览图片
    20165105 第二周学习总结
    20165105课下作业
    20165105第一周学习查缺补漏
    第四周课下作业20165105
    20165105 201620172 《Java程序设计》第1周学习总结
    我期望的师生关系
    .NET使用NPOI组件将数据导出Excel
  • 原文地址:https://www.cnblogs.com/ilinuxer/p/6810420.html
Copyright © 2020-2023  润新知