【问题标题】:oozie > coordinator > how to trigger action with external eventoozie > 协调器 > 如何使用外部事件触发动作
【发布时间】:2016-01-04 19:17:28
【问题描述】:

在 Oozie 网站中,有人告诉我们“通常,工作流作业是根据固定的时间间隔和/或数据可用性运行的。在某些情况下,它们可以由外部事件触发。” 有人知道如何用外部事件触发动作吗?

【问题讨论】:

    标签: oozie oozie-coordinator


    【解决方案1】:

    外部事件可以是某个目录中的文件的可用性。 所以 oozie 协调器有这个功能。当您需要在完成第一个依赖工作流时触发第二个工作流时,这很有用。 第二个协调器继续轮询success_trigger.txt 的可用性 触发目录路径

    triggerdirpath 是第一个工作流创建 success_trigger.txt 的 hdfs 路径

    <coordinator-app name="Xxx" frequency="${coord:days(1)}" start="${startTime2}" end="${endTime}" timezone="GMT-0700" xmlns="uri:oozie:coordinator:0.2">
    
    
            <dataset name="check_for_SUCCESS" frequency="${coord:days(1)}" initial-instance="${startTime2}" timezone="GMT-0700">
                    <uri-template>${triggerdirpath}</uri-template>
                    <done-flag>success_trigger.txt</done-flag>
                </dataset>
        </datasets>
    
        <input-events>
            <data-in name="check_for_SUCCESS_data" dataset="check_for_SUCCESS">
            <instance>${startTime2}</instance>
            </data-in>
          </input-events>
    
    
        <action>
            <workflow>
                <app-path>${WF_path}</app-path>
                <configuration>
                    <property><name>WaitForThisInputData</name><value>${coord:dataIn('check_for_SUCCESS_data')}</value></property>
                    <property><name>WhenToStart</name><value>${startTime2}</value></property>
                    <property><name>rundate</name><value>${coord:dataOut('currentFullDate')}</value></property>
                    <property><name>previousdate</name><value>${coord:dataOut('previousFullDate')}</value></property>
                    <property><name>currentyear</name><value>${coord:dataOut('currentYear')}</value></property>
                    <property><name>currentmonth</name><value>${coord:dataOut('currentMonth')}</value></property>
                    <property><name>currentday</name><value>${coord:dataOut('currentDay')}</value></property>
                    <property><name>previousbatchtime</name><value>${coord:formatTime(coord:dateOffset(coord:nominalTime(),-1,'DAY'),"yyyy-MM-dd")}</value></property>
                    <property><name>currentbatchtime</name><value>${coord:formatTime(coord:dateOffset(coord:nominalTime(),0,'DAY'),"yyyy-MM-dd")}</value></property>
                    <property><name>nextbatchtime</name><value>${coord:formatTime(coord:dateOffset(coord:nominalTime(),1,'DAY'),"yyyy-MM-dd")}</value></property>
                </configuration>
            </workflow>
        </action>
    </coordinator-app>
    

    【讨论】:

    • 非常感谢您的回复!但是工作流 ${WF_path} 必须使用属性 WaitForThisInputData 对吗?例如在决策节点中。否则 Oozie 自己可能根本不会检查 success_trigger.txt 的存在。至少我尝试过类似的。无论success_trigger.txt是否存在,工作流总是会执行
    • 对不起,我在“实例”节点中使用了 ${coord:current(0)},但它根本不起作用。然后我尝试按照您的建议使用 ${startTime2} 并且它有效。 ${coord:current(0)} 不起作用的原因是什么?
    • 与coordinator的开始时间无关。 Coordinator 将在指定的时间触发,但它会一直处于等待状态,直到并且除非它在指定的 hdfs 目录中找到 success_trigger.txt。因此不会触发工作流 ${WF_path}。为了更清楚,您可以参考oozie.apache.org/docs/3.2.0-incubating/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    • 1970-01-01
    相关资源
    最近更新 更多