Oozie触发器文件协调器。触发器文件不是来自每小时文件夹

时间:2016-01-26 20:21:26

标签: oozie eventtrigger oozie-coordinator crontrigger

我正在尝试使用依赖项文件创建协调器 - 触发器文件。 我的协调员的频率是5分钟。超时是4分钟。

我的目标是,只有在创建指定的触发器文件时,协调器才应执行工作流。如果未创建触发器文件,协调器应等到文件创建并在第4分钟结束时超时。一旦协调器触发工作流,工作流将删除触发器文件。每当源数据更新时都会触发触发器文件,因此我们必须再次运行工作流程。

触发器文件可能每天多次,因此我将协调器频率设置为5分钟。我尝试过以下代码:

<coordinator-app name="transform_data_if_exists_coord" frequency="${freqMin}" start="${startDate}" end="${endDate}" timezone="${timeZone}" xmlns="uri:oozie:coordinator:0.1">
    <controls>
        <timeout>${timeOutMin}</timeout>
        <concurrency>${concurrencyCount}</concurrency>
    </controls>
    <datasets>
        <dataset name="input1" frequency="${coord:minutes(${freqMin})}" initial-instance="${startDate}" timezone="${timeZone}">
        <uri-template>maprfs:////idn/home/deploy/inputdata/file</uri-template>
        <done-flag>trigger</done-flag>
        </dataset>
   </datasets>

   <action>
      <workflow>
         <app-path>/idn/home/deploy/triggerEmail/triggerEmail_wf.xml</app-path>
      </workflow>
   </action>
</coordinator-app>

具有以下属性:

startDate=2016-01-26T18:20Z
endDate=2017-01-17T06:00Z
timeZone=UTC
freqMin=5
timeOutMin=4
concurrencyCount=1

2 个答案:

答案 0 :(得分:0)

您需要在操作中添加输入事件和属性WaitForThisInputData

    <input-events>
            <data-in name="check_for_input" dataset="input1">
            <instance>${startTime2}</instance>
            </data-in>
     </input-events>

  <action>
      <workflow>
         <app-path>/idn/home/deploy/triggerEmail/triggerEmail_wf.xml</app-path>
<configuration>
                <property><name>WaitForThisInputData</name><value>${coord:dataIn('check_for_input')}</value></property>
</configuration>
      </workflow>
   </action

&GT;

答案 1 :(得分:0)

虽然我的工作流程仅在触发器文件存在时才开始启动。 有时,双工作流程会被同一个父协调器实例启动。 也就是说,如果协调员在协调器的第25个实例处启动工作流,那么工作流ID包含父级为 0001212-XXXXXXX-Oozie的-MAPR-C @ 25

但是我看到两个工作流程被相同的父协调器实例启动,这是不理想的。这两项工作都在同一时间戳开始。 我错过了财产吗?我已将协调器的并发性设置为1。 当触发文件在数小时内出现明显差距后出现时会出现此问题。