【发布时间】:2016-07-21 12:24:04
【问题描述】:
在我的用例中,协调器操作的输出被下一次迭代使用,因此如果其中一个失败,未完成/损坏的数据将被输入到下一个协调器操作中。
如果协调器操作中的工作流步骤之一失败,是否有任何方法可以暂停 Oozie 协调器?
例如代替:
<action name="Delete_TMP_Files">
<fs>
<delete path='${outputPath}*'/>
</fs>
<ok to="End"/>
<error to="Kill"/>
</action>
我们可以这样做吗:
<action name="Delete_TMP_Files">
<fs>
<delete path='${outputPath}*'/>
</fs>
<ok to="End"/>
<error to="Suspend"/>
</action>
所以可以在其输出被下一个协调器操作覆盖之前诊断错误?
PS: fs>delete 不是这里的实际用例,只是一个例子。
【问题讨论】:
-
如果你的“暂停”动作是一个带有无限循环的 Shell 动作——例如
while [[ 1 -eq 1 ]] ; do sleep 1h ; done-- 那么它会有效地让你的工作流挂起;并使用 Coordinator<concurrency>1</concurrency>选项,这也会使 Coordinator 挂起。但这不会捕捉到工作流在运行时被终止的情况。 -
您也可以像 Pig 或 Spark 一样,在工作流的最终操作中创建一种
_SUCCESS信号量——并让协调器使用<dataset>子句等待该信号量;然后下一个工作流运行的第一个动作将删除它,依此类推。但是那个“数据集”子句听起来很复杂,这篇文章暗示了更多github.com/yahoo/oozie/wiki/Oozie-Coord-Use-Cases
标签: hadoop oozie oozie-coordinator