Hadoop oozie协调器输入事件不工作
我有三位协调员A、B和C B和C的协调器取决于A的输出。也就是说,如果A的输出就绪,B和C的协调器将运行 因此,我使用输入事件来控制这种依赖关系 协调器B和C的结构如下所示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
<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>