oozie协调器输入事件不工作

z31licg0  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(374)

我有三个协调员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相同。
工作流程将创建 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的协调员是否有什么遗漏。
谢谢您!

6yt4nkrj

6yt4nkrj1#

原因是您没有指定done标志,所以oozie使用默认值:\u success
完成标志:数据集的完成文件。如果未指定done标志,则oozie将hadoop配置为在输出目录中创建一个\u成功文件。如果done标志设置为空,那么协调器将查找目录本身的存在。
你应该添加一个空的

<done-flag></done-flag>

到数据集。

相关问题