0

假设我有一个工作流操作,如果它存在,我需要从 hdfs 获取和使用文件,但否则不会失败。有没有办法在工作流配置中做到这一点?

所以,如果我有这样的事情:

<action name="run">
    <java>
        <main-class>AJavaProgram</main-class>
        ...
        <arg>-files</arg>
        <arg>properties.json</arg>
        ...
        <file>${concat(additionsPath, "properties.json")}</file>
        ...
    </java>
</action>

只要该属性文件存在于正确位置的 hdfs 中,它就可以正常工作,但如果不存在,则工作流程将失败。如果文件不存在以从 HDFS 复制,有没有办法让它不失败?一种从 workflow.xml 中使文件可选的方法?

4

2 回答 2

1

每个动作都有两个选项

<ok to="myShelljob"/>
<error to="myShelljob"/>

在错误部分中提到了下一个 Shell 操作名称,而不是失败。它将继续下一个 shell 动作。在 shell 操作中,您可以检查文件是否存在。如果文件不存在,则继续下一步操作,如果发生任何其他错误,则操作将失败。

于 2017-07-26T15:48:33.870 回答
0

当操作处于ERROR 或 FAILED 状态时,Oozie 提供用户重试功能。

您可以在操作定义中指定retry-maxretry-interval 。因此,当文件不在目录中时,它会重试而不是失败。

工作流操作中的用户重试示例如下:

  <workflow-app xmlns="uri:oozie:workflow:0.3" name="wf-name">
  <action name="a" retry-max="2" retry-interval="1">
  </action>

参考:工作流操作的用户重试(自 Oozie 3.1 起)

于 2017-07-26T13:35:03.250 回答