有没有办法运行脚本(Pig,shell)以响应错误发生?我的意思是:我在Oozie(工作流管理器)中创建工作流,并且任务失败和调用错误之一,如果发生此错误,我想运行特定脚本或其他任务。我想提供某种错误处理:
我将非常感谢你的帮助。
答案 0 :(得分:0)
如果错误1& error2发生在同一个工作流操作中,然后将您的工作流程更改为java action&在那里写你的错误处理逻辑[它在工作流程中不可能]。如果这些错误是不同操作的一部分,请尝试以下操作。
试试这个:
<action name="firstjob">
<map-reduce>
<job-tracker>foo:9001</job-tracker>
<name-node>bar:9000</name-node>
<job-xml>job1.xml</job-xml>
</map-reduce>
<ok to="end"/>
<error to="errorscript1"/>
</action>
<action name="secondjob">
<map-reduce>
<job-tracker>foo:9001</job-tracker>
<name-node>bar:9000</name-node>
<job-xml>job2.xml</job-xml>
</map-reduce>
<ok to="end"/>
<error to="errorscript2"/>
</action>
<action name="errorscript1">
<shell xmlns="uri:oozie:shell-action:0.2">
</shell>
<ok to="decide"/>
<error to="fail"/>
</action>
<action name="errorscript2">
<shell xmlns="uri:oozie:shell-action:0.2">
</shell>
<ok to="decide"/>
<error to="fail"/>
</action>
答案 1 :(得分:0)
如果使用Hue Oozie工作流程编辑器,目前无法将“错误”链接发送到除“kill”节点之外的其他节点:https://issues.cloudera.org/browse/HUE-1457
答案 2 :(得分:0)
对于错误处理,您可以使用Decision nodes。例如:
<action name="Action1">
<map-reduce>
<job-tracker>foo:9001</job-tracker>
<name-node>bar:9000</name-node>
<job-xml>job1.xml</job-xml>
</map-reduce>
<ok to="NextAction"/>
<error to="ErrorhandlingDecision"/>
</action>
<decision name="ErrorhandlingDecision">
<switch>
<case to="CorrectError1Node">
${wf:errorCode("SourceActionNodeName") eq "JA018"}
</case>
<case to="CorrectError2Node">
${errorMessage(wf:lastErrorNode()) eq "Error Msg Received"}
</case>
<default to="NextAction"/>
</switch>
</decision>
您需要捕获错误代码或错误消息。
注意:Expression Lang(EL)支持以下操作
[“}”,“。”,“&gt;”,“gt”,“&lt;”,“lt”,“==”,“eq”,“&lt; =”,“le”中的一个,“&gt; =”,“ge”,“!=”,“ne”,“[”,“+”,“ - ”,“*”,“/”,“div”,“%”,“mod” “,”和“,”&amp;&amp;“,”或“,”||“,”?“]
希望得到这个帮助。