oozie coordinator输入事件不起作用

时间:2015-09-04 15:03:58

标签: hadoop oozie hadoop2 hadoop-plugins oozie-coordinator

我有三名协调员A,B和C.

B和C的协调器取决于A的输出。也就是说,如果A的输出准备就绪,B和C的协调器将运行。

因此,我使用输入事件来控制这种依赖。

协调员B和C的结构看起来像

<coordinator-app name="B" frequency="1440" start=${start} end=${end} timezone="UTC" xmlns="uri:oozie:coordinator:0.1">
   <datasets>
      <dataset name="input1" frequency="1440" initial-instance=${start} timezone="UTC">
         <uri-template>hdfs://localhost:9000/tmp/revenue_feed/${YEAR}/${MONTH}/${DAY}</uri-template>
      </dataset>
   </datasets>
   <input-events>
      <data-in name="coordInput1" dataset="input1">
          <instance>${coord:current(0)}</instance>
      </data-in>
   </input-events>
   <action>
      <workflow>
         <app-path>hdfs://localhost:9000/B/workflows</app-path>
      </workflow>
   </action>     
</coordinator-app>

因此,如果创建了hdfs://localhost:9000/tmp/revenue_feed/${YEAR}/${MONTH}/${DAY}/_SUCCESS,将触发协调员B和C来运行他们的工作流程。

A的协调员看起来像:

<coordinator-app name="B" frequency="1440" start=${start} end=${end} timezone="UTC" xmlns="uri:oozie:coordinator:0.1">
   <action>
      <workflow>
         <app-path>hdfs://localhost:9000/A/workflows</app-path>
      </workflow>
   </action>
</coordinator-app>

${start}${end}与B和C相同。

A的工作流程将创建hdfs://localhost:9000/tmp/revenue_feed/${YEAR}/${MONTH}/${DAY}/_SUCCESS

但是,B和C的协调员仍在等待hdfs://localhost:9000/tmp/revenue_feed/${YEAR}/${MONTH}/${DAY}/_SUCCESS

即使我使用A的协调员的输出事件,B和C的工作流仍然需要创建的输入数据集。

<coordinator-app name="A" frequency="1440" start=${start} end=${end} timezone="UTC" xmlns="uri:oozie:coordinator:0.1">
    <datasets>
        <dataset name="output1" frequency="1440" initial-instance=${start} timezone="UTC">
        <uri-template>hdfs://localhost:9000/tmp/revenue_feed/${YEAR}/${MONTH}/${DAY}</uri-template>
        </dataset>
    </datasets>

    <output-events>
        <data-out name="coordOutput1" dataset="output1">
            <instance>${coord:current(0)}</instance>
        </data-out>
    </output-events>
   <action>
      <workflow>
         <app-path>hdfs://localhost:9000/A/workflows</app-path>
      </workflow>
   </action>
</coordinator-app>

但是,如果我在没有协调员的情况下提交A的工作流程,那么B和C的工作流程将按预期触发。

我不确定A协调员是否遗漏了某些内容。

谢谢!

1 个答案:

答案 0 :(得分:0)

原因是你没有指定done-flag,所以oozie使用默认值:_success

  

done-flag:数据集的完成文件。如果done-flag不是   指定,然后Oozie配置Hadoop创建一个_SUCCESS文件   输出目录。如果done标志设置为空,则   协调员查找目录本身的存在。

你应该添加一个空的

<done-flag></done-flag>

到数据集。