<!--
  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.1" name="recovery-el-wf">
    <start to="hadoop"/>
    <action name="hadoop">
        <map-reduce>
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <prepare>
                <delete path="${delPath}"/>
            </prepare>
            <configuration>
                <property>
                    <name>mapred.map.tasks</name>
                    <value>1</value>
                </property>
                <property>
                    <name>mapred.reduce.tasks</name>
                    <value>0</value>
                </property>
                <property>
                    <name>mapred.mapper.class</name>
                    <value>${mrclass}</value>
                </property>
                <property>
                    <name>mapred.reducer.class</name>
                    <value>${mrclass}</value>
                </property>
                <property>
                    <name>mapred.input.dir</name>
                    <value>${input}</value>
                </property>
                <property>
                    <name>mapred.output.dir</name>
                    <value>${output}</value>
                </property>
            </configuration>
        </map-reduce>
        <ok to="subwf"/>
        <error to="k"/>
    </action>
    <action name="subwf">
        <sub-workflow>
            <app-path>${subWfApp}</app-path>
            <configuration>
                <property>
                    <name>a</name>
                    <value>A</value>
                </property>
            </configuration>
        </sub-workflow>
        <ok to="end"/>
        <error to="k"/>
    </action>
    <kill name="k">
        <message>kill</message>
    </kill>
    <end name="end"/>
</workflow-app>
