Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop oozie协调器输入事件不工作_Hadoop_Oozie_Hadoop2_Hadoop Plugins_Oozie Coordinator - Fatal编程技术网

Hadoop oozie协调器输入事件不工作

Hadoop oozie协调器输入事件不工作,hadoop,oozie,hadoop2,hadoop-plugins,oozie-coordinator,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

我有三位协调员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>
它的
${start}
${end}
与B和C相同

A的工作流将创建
hdfs://localhost:9000/tmp/revenue_feed/${YEAR}/${MONTH}/${DAY}/\u成功

然而,B和C的协调人仍在等待
hdfs://localhost:9000/tmp/revenue_feed/${YEAR}/${MONTH}/${DAY}/\u成功

即使我使用了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>

hdfs://localhost:9000/tmp/revenue_feed/${YEAR}/${MONTH}/${DAY}
${coord:current(0)}
hdfs://localhost:9000/A/workflows
但是,如果我在没有协调器的情况下提交A的工作流,则B和C的工作流将按预期触发

我不确定我的协调人A中是否缺少什么


谢谢大家!

原因是您没有指定done标志,因此oozie使用默认值:\u success

完成标志:数据集的完成文件。如果未设置完成标志 指定,然后Oozie将Hadoop配置为在 输出目录。如果完成标志设置为空,则 协调器查找目录本身是否存在

您应该添加一个空的

<done-flag></done-flag>


到数据集。

Q1。在代码示例中,协调器A被命名为“B”。那是复制/粘贴打字错误吗?问题2。为什么不在A完成后并行触发2个子工作流(B和C)-因为A可能想在B和/或C完成之前重新启动?是的!这是个打字错误。是否可以直接从一个工作流触发工作流,并使用oozie并行运行每个工作流(B和C并行运行)?我不知道怎么做。看看“Fork/Join”操作和“子工作流”操作。例如,在那个古老而全面的教程中:--然后将我的评论标记为有用,如果它是:-)谢谢。我将在接下来的两天内试一试。无论如何,我仍然不明白为什么我的方法不起作用,如果我在没有协调人的情况下提交A的工作流,它将起作用。我认为B和C的协调员将始终监视目录
hdfs://localhost:9000/tmp/revenue_feed/${YEAR}/${MONTH}/${DAY}
如果目录准备就绪,它们将被触发。免责声明:我感到幸运的是,我从未处理过这些“数据集”…事实上,已在其输出目录中创建_成功文件的工作流,但其他相关工作流未运行。哦,我明白了,您也对其进行了注释。。。真奇怪。让我重复一下你的问题。
<done-flag></done-flag>