假设我有一个工作流操作,我需要获取并使用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创建文件可选的方法吗?
答案 0 :(得分:1)
每个动作都有两个选项
<ok to="myShelljob"/>
<error to="myShelljob"/>
在错误部分提到了下一个Shell操作名称,而不是失败。它将继续下一个shell动作。 在shell操作中,您可以检查文件是否存在。如果文件不存在,继续下一步操作,如果发生任何其他错误,则操作将失败。
答案 1 :(得分:0)
当操作处于 ERROR或FAILED状态时,Oozie提供用户重试功能。
您可以在操作定义中指定 retry-max 和 retry-interval 。因此,当文件不在目录中时,它会被重试而不是失败。
工作流操作中用户重试的示例是:
<workflow-app xmlns="uri:oozie:workflow:0.3" name="wf-name">
<action name="a" retry-max="2" retry-interval="1">
</action>