如何从OOZIE工作流中POST REST API消息?

问题描述 投票:0回答:1

我有一个工作流程,它看起来像下面。

start = fork1
<fork1/>
   <action1>
   <action2>
 <fork1>
 <join1 to fork2>
  <fork2/>
    <action3>
   <action4>
  <fork2>..

....
....
<join 75 to fork 76>
 <fork76>
     <action 987>
     <action 988>
  <fork76/>
 <join 76 to "END">

每个动作有2个结束节点。

我想以下面的方式修改相同的。

<OK > to post a "SUCCESS" message to REST endpoint and then to proceed to next_join_number.
<ERROR> to post "FAILURE" message to REST endpoint and then to proceed email & kill action.

但我不知道如何使这个通用的&实现它.唯一的方法,我可以想到的是写988个单独的行动发送状态消息和附加到行动。

apache-spark oozie
1个回答
1
投票

为每个动作创建一个子工作流。

每个动作(比方说Spark)将有一个单独的工作流。而在这个工作流中,你将有2个额外的动作(可能是一个Shell动作)。

<workflow-app name="spark-subworkflow" xmlns="uri:oozie:workflow:0.4">
    ... # configs
    <start to="special-spark"/>
    <action name="special-spark">
        <spark>
            ...
        </spark>
        <ok to="send-success"/>
        <error to="send-failure"/>
    </action>
    <action name="send-success">
        <shell>
            <job-tracker>[JOB-TRACKER]</job-tracker>
            <name-node>[NAME-NODE]</name-node>
            <exec>script-to-run.sh</exec>
            <env-var>MESSAGE_TO_SEND=SUCCESS</env-var>
            <file>hdfs:///path-to-script/your-rest-script.sh#script-to-run.sh</file>
        </shell>
        <ok to="end"/>
        <error to="end"/>
    </action>
    <action name="send-failure">
        <shell>
            <job-tracker>[JOB-TRACKER]</job-tracker>
            <name-node>[NAME-NODE]</name-node>
            <exec>script-to-run.sh</exec>
            <env-var>MESSAGE_TO_SEND=FAILURE</env-var>
            <file>hdfs:///path-to-script/your-rest-script.sh#script-to-run.sh</file>
        </shell>
        <ok to="kill"/>
        <error to="kill"/>
    </action>
</workflow-app>

类似于这种方式,你需要替换你的每个动作。对子工作流进行参数化,这样它就可以被同一类型的动作重复使用。

请注意,我创建了两个动作,一个是成功动作,一个是失败动作。这是因为如果发送状态的动作失败了,你希望你的工作流能够继续。所以,对于errorno-error 的 send-success 你的工作流程应该继续;同样的,你的 send-failure它将杀死子工作流。

我试着用 决定节点. 但没有运气。所以只能选择创建两个独立的动作。即使你可以使用相同的脚本 your-rest-script.sh 作为 MESSAGE_TO_SEND 是两个动作的参数。使用javapython-shell动作的流程是一样的。

© www.soinside.com 2019 - 2024. All rights reserved.