When doing forks, I always find it helpful to write it out like this or
even to draw a picture:

start —> fork

fork —> shell1, shell2

shell1 —> fork1

fork1 —> shell3, join0

shell2 —> fork2

shell3 —> join

fork2 —> shell5, join0

join0 —> shell4

shell4 —> join

shell5 —> join

join —> end


The problem is that your inner forks (i.e. fork1 and fork2) are
“intersecting” with the outer fork (i.e. “fork”).  Each fork must end with
its own join (they come in pairs) and they shouldn’t be overlapping.  So,
the main issue is that you have fork1 and fork2 both matching with join0.


I’m actually not sure there is a valid equivalent of exactly what you have;
I think you’ll have to make some minor changes to your overall structure to
make it valid, but I could be wrong.



- Robert


On Thu, Nov 7, 2013 at 6:51 AM, 任桂禾 <[email protected]> wrote:

>
>
> ------------------ Original ------------------
> *From: * "任桂禾"<[email protected]>;
> *Date: * Thu, Nov 7, 2013 10:49 PM
> *To: * "user"<[email protected]>;
> *Subject: * Re:hi,how can I complete this DAG in a workflow using oozie?
>
> sorry to forget my pic
>
>
> ------------------ Original ------------------
> *From: * "任桂禾"<[email protected]>;
> *Date: * Thu, Nov 7, 2013 10:44 PM
> *To: * "user"<[email protected]>;
> *Subject: * hi,how can I complete this DAG in a workflow using oozie?
>
> hi,how can I complete this DAG in a workflow using oozie?
>  With oozie.wf.validate.ForkJoin=true,I can not do it.
> So I set oozie.wf.validate.ForkJoin=false ,and write a config like
> this,but it can't run normally yet.
> Hope for help!
> 3x
>
> Here is my config
>
>  <!--
>   Licensed to the Apache Software Foundation (ASF) under one
>   or more contributor license agreements.  See the NOTICE file
>   distributed with this work for additional information
>   regarding copyright ownership.  The ASF licenses this file
>   to you under the Apache License, Version 2.0 (the
>   "License"); you may not use this file except in compliance
>   with the License.  You may obtain a copy of the License at
>
>        http://www.apache.org/licenses/LICENSE-2.0
>
>   Unless required by applicable law or agreed to in writing, software
>   distributed under the License is distributed on an "AS IS" BASIS,
>   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
>   See the License for the specific language governing permissions and
>   limitations under the License.
> -->
> <workflow-app xmlns="uri:oozie:workflow:0.4" name="shell-wf">
>     <start to="fork"/>
>     <fork name="fork">
>         <path start="shell1"/>
>         <path start="shell2"/>
>     </fork>
>     <action name="shell1">
>         <shell xmlns="uri:oozie:shell-action:0.2">
>             <job-tracker>${jobTracker}</job-tracker>
>             <name-node>${nameNode}</name-node>
>             <configuration>
>                 <property>
>                     <name>mapred.job.queue.name</name>
>                     <value>${queueName}</value>
>                 </property>
>             </configuration>
>             <exec>sleep</exec>
>             <argument>1</argument>
>             <capture-output/>
>         </shell>
>         <ok to="fork1"/>
>         <error to="fail"/>
>     </action>
>     <fork name="fork1">
>         <path start="shell3"/>
>         <path start="join0"/>
>     </fork>
>     <action name="shell2">
>         <shell xmlns="uri:oozie:shell-action:0.2">
>             <job-tracker>${jobTracker}</job-tracker>
>             <name-node>${nameNode}</name-node>
>             <configuration>
>                 <property>
>                     <name>mapred.job.queue.name</name>
>                     <value>${queueName}</value>
>                 </property>
>             </configuration>
>             <exec>sleep</exec>
>             <argument>2</argument>
>             <capture-output/>
>         </shell>
>         <ok to="fork2"/>
>         <error to="fail"/>
>     </action>
>    <fork name="fork2">
>         <path start="shell5"/>
>         <path start="join0"/>
>     </fork>
>    <action name="shell3">
>         <shell xmlns="uri:oozie:shell-action:0.2">
>             <job-tracker>${jobTracker}</job-tracker>
>             <name-node>${nameNode}</name-node>
>             <configuration>
>                 <property>
>                     <name>mapred.job.queue.name</name>
>                     <value>${queueName}</value>
>                 </property>
>             </configuration>
>             <exec>sleep</exec>
>             <argument>1</argument>
>             <capture-output/>
>         </shell>
>         <ok to="join"/>
>         <error to="fail"/>
>     </action>
>       <join name="join0" to="shell4"/>
>    <action name="shell4">
>         <shell xmlns="uri:oozie:shell-action:0.2">
>             <job-tracker>${jobTracker}</job-tracker>
>             <name-node>${nameNode}</name-node>
>             <configuration>
>                 <property>
>                     <name>mapred.job.queue.name</name>
>                     <value>${queueName}</value>
>                 </property>
>             </configuration>
>             <exec>sleep</exec>
>             <argument>10</argument>
>             <capture-output/>
>         </shell>
>         <ok to="join"/>
>         <error to="fail"/>
>     </action>
>   <action name="shell5">
>         <shell xmlns="uri:oozie:shell-action:0.2">
>             <job-tracker>${jobTracker}</job-tracker>
>             <name-node>${nameNode}</name-node>
>             <configuration>
>                 <property>
>                     <name>mapred.job.queue.name</name>
>                     <value>${queueName}</value>
>                 </property>
>             </configuration>
>             <exec>sleep</exec>
>             <argument>15</argument>
>             <capture-output/>
>         </shell>
>         <ok to="join"/>
>         <error to="fail"/>
>     </action>
>       <join name="join" to="end"/>
>     <kill name="fail">
>         <message>Shell action failed, error
> message[${wf:errorMessage(wf:lastErrorNode())}]</message>
>     </kill>
>     <end name="end"/>
> </workflow-app>
>
>
> ------------------------------
> renguihe
>

Reply via email to