【问题标题】:How to suspend Oozie coordinator if a coordinator action fails?如果协调器操作失败,如何暂停 Oozie 协调器?
【发布时间】: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 &lt;concurrency&gt;1&lt;/concurrency&gt; 选项,这也会使 Coordinator 挂起。但这不会捕捉到工作流在运行时被终止的情况。
  • 您也可以像 Pig 或 Spark 一样,在工作流的最终操作中创建一种 _SUCCESS 信号量——并让协调器使用 &lt;dataset&gt; 子句等待该信号量;然后下一个工作流运行的第一个动作将删除它,依此类推。但是那个“数据集”子句听起来很复杂,这篇文章暗示了更多github.com/yahoo/oozie/wiki/Oozie-Coord-Use-Cases

标签: hadoop oozie oozie-coordinator


【解决方案1】:

您不能基于工作流失败(来自协调器操作)暂停协调器。

如果工作流的输出具有某种模式,那么您可以使用它并在工作流开始时对其进行检查。

否则,您始终可以 touch 一个文件作为工作流中的最后一个操作,只要它成功并且在失败的情况下,删除(如果相同的文件,不是基于日期的)。使用与工作流程中的第一次检查相同的文件并相应地继续。最初,您可能需要手动创建文件。

您可以在失败的情况下使用电子邮件操作并获得通知。

这只是一种解决方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多