oozie-工作流控制节点详述

控制节点包括start、end、kill、decision、fork、join。其中start、end、kill代表了工作流的起始及工作流执行逻辑(路径),如decision、fork、join

节点名称必需复合[a-zA-Z][\-_a-zA-Z0-0]*,最大20个字符;

start控制节点

此节点是工作流任务的入口点,工作流定义必须有一个start节点

语法:

<workflow-appname="[WF-DEF-NAME]"xmlns="uri:oozie:workflow:0.1">

...

<startto="[NODE-NAME]"/>

...

</workflow-app>

例:

<workflow-appname="foo-wf"xmlns="uri:oozie:workflow:0.1">

...

<startto="firstHadoopJob"/>

...

</workflow-app>

end节点

此节点是工作流执行成功的节点。当工作流有多个任务执行,其中有一个到达end节点,其它任务会被kill掉,但结果是成功的。工作流定义必须有一个end节点

语法:

<workflow-appname="[WF-DEF-NAME]"xmlns="uri:oozie:workflow:0.1">

...

<endname="[NODE-NAME]"/>

...

</workflow-app>

例:

<workflow-appname="foo-wf"xmlns="uri:oozie:workflow:0.1">

...

<endname="end"/>

</workflow-app>

kill节点

此节点,允许工作流任务kill自己,当工作流遇到错误,会执行kill节点。如果有多个工作流任务,其中有一个先到达了kill节点,其它任务也会被kill掉,整个任务是失败的。工作流定义可以有零个或多个kill节点

语法:

<workflow-appname="[WF-DEF-NAME]"xmlns="uri:oozie:workflow:0.1">

...

<killname="[NODE-NAME]">

<message>[MESSAGE-TO-LOG]</message>

</kill>

...

</workflow-app>

message元素的内容会记录工作流任务被kill的原因

例:

<workflow-appname="foo-wf"xmlns="uri:oozie:workflow:0.1">

...

<killname="killBecauseNoInput">

<message>Inputunavailable</message>

</kill>

...

</workflow-app>

decision节点

此节点允许根据条件选择不同的执行路径,比较像swith-case表达式,通过断言来决定执行哪个路径,switch-case建议有一个default,以免出现错误。断言是JSPExpressionLanguage(EL)表达式

语法:

<workflow-appname="[WF-DEF-NAME]"xmlns="uri:oozie:workflow:0.1">

...

<decisionname="[NODE-NAME]">

<switch>

<caseto="[NODE_NAME]">[PREDICATE]</case>

...

<caseto="[NODE_NAME]">[PREDICATE]</case>

<defaultto="[NODE_NAME]"/>

</switch>

</decision>

...

</workflow-app>

例:

<workflow-appname="foo-wf"xmlns="uri:oozie:workflow:0.1">

...

<decisionname="mydecision">

<switch>

<caseto="reconsolidatejob">

${fs:fileSize(secondjobOutputDir)gt10*GB}

</case>

<caseto="rexpandjob">

${fs:filSize(secondjobOutputDir)lt100*MB}

</case>

<caseto="recomputejob">

${hadoop:counters('secondjob')[RECORDS][REDUCE_OUT]lt1000000}

</case>

<defaultto="end"/>

</switch>

</decision>

...

</workflow-app>

fork&join节点

fork节点把一个执行路径分发成多个并发执行路径

join节点一直等待,直到所有的fork节点执行路径到达join节点

fork&join节点必须成对出现

语法:

<workflow-appname="[WF-DEF-NAME]"xmlns="uri:oozie:workflow:0.1">

...

<forkname="[FORK-NODE-NAME]">

<pathstart="[NODE-NAME]"/>

...

<pathstart="[NODE-NAME]"/>

</fork>

...NAME

<joinname="[JOIN-NODE-NAME]"to="[NODE-NAME]"/>

...

</workflow-app>

例:

<workflow-appname="sample-wf"xmlns="uri:oozie:workflow:0.1">

...

<forkname="forking">

<pathstart="firstparalleljob"/>

<pathstart="secondparalleljob"/>

</fork>

<actionname="firstparallejob">

<map-reduce>

<job-tracker>foo:9001</job-tracker>

<name-node>bar:9000</name-node>

<job-xml>job1.xml</job-xml>

</map-reduce>

<okto="joining"/>

<errorto="kill"/>

</action>

<actionname="secondparalleljob">

<map-reduce>

<job-tracker>foo:9001</job-tracker>

<name-node>bar:9000</name-node>

<job-xml>job2.xml</job-xml>

</map-reduce>

<okto="joining"/>

<errorto="kill"/>

</action>

<joinname="joining"to="nextaction"/>

...

</workflow-app>

相关推荐