如何在子工作流程失败时中止oozie工作流程?

时间:2014-03-25 11:08:45

标签: hadoop oozie

我在主工作流程中创建了子工作流程,并按顺序调用它们,这意味着当一个人完成后,下一个子工作流程将被触发,但是在子工作流程失败时,我的主工作流程没有得到中止,下一个子工作流程被触发。主要工作流程示例如下所示

<?xml version="1.0"?>
<workflow-app xmlns="uri:oozie:workflow:0.4" name="Mainworkflow_">
  <start to="subworkflow-node-abc"/>
  <action name="subworkflow-node-abc">
    <sub-workflow>
      <app-path>hdfs://link/abc.xml</app-path>
      <configuration>
        <property>
          <name>autoReconnect</name>
          <value>true</value>
        </property>
        <property>
          <name>TableName</name>
          <value>abc</value>
        </property>
        <property>
          <name>targetDirPath</name>
          <value>${targetDirPath}</value>
        </property>
      </configuration>
    </sub-workflow>
    <ok to="subworkflow-node-def"/>
    <error to="kill"/>
  </action>
  <action name="subworkflow-node-def">
    <sub-workflow>
      <app-path>hdfs://def.xml</app-path>
      <configuration>
        <property>
          <name>autoReconnect</name>
          <value>true</value>
        </property>
        <property>
          <name>TableName</name>
          <value>def</value>
        </property>
        <property>
          <name>targetDirPath</name>
          <value>${targetDirPath}</value>
        </property>
      </configuration>
    </sub-workflow>
    <ok to="end"/>
    <error to="kill"/>
  </action>
  <kill name="kill">
    <message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
  </kill>
  <end name="end"/>
</workflow-app>

因此,在上面的示例中,第二个工作流程正在被触发。任何人都可以告诉杀死主要工作流程的方法,以防它中止。

2 个答案:

答案 0 :(得分:2)

您可以使用Decision Control Node

例如,如果suv-workflow的输出不存在 - 发送到结束/失败。

答案 1 :(得分:0)

出现了不同的错误。由于错误,Kill节点没有被执行。我们必须仅在主工作流程中使用EL命令,因此在Kill节点,工作流程具有另一个参数,该参数使得kill节点卡住并且主要工作流程没有中止