oozie调用sub-workflow串联工作流
job.properties
nameNode=hdfs://node1:8020
jobTracker=node1:8032
thriftAddress=thrift://node1:9083
queueName=default
hiveSiteXml=${nameNode}/user/hive/conf/hive-site.xml
moduleName=dataclean
projectName=pv
configRoot=${nameNode}/user/apps/${projectName}/dataclean-script
oozieAppsRoot=${nameNode}/user/apps/dataclean/${projectName}
oozie.use.system.libpath=true
oozie.wf.application.path=${oozieAppsRoot}
oozieScriptsRoot=${configRoot}/dm1
projectCostScriptName=BUILD_DM1_PV_PROJECT_COST
projectDeviceScriptName=BUILD_DM1_PV_PROJECT_DEVICE
workflow.xml
<?xml version="1.0" encoding="UTF-8"?>
<workflow-app xmlns="uri:oozie:workflow:0.5" name="wf-${moduleName}-${projectName}">
<start to="dataclean-forking"/>
<fork name="dataclean-forking">
<path start="BUILD_DM1_PV_PROJECT_COST"/>
<path start="BUILD_DM1_PV_PROJECT_DEVICE"/>
</fork>
<join name="dataclean-joining" to="end"/>
<action name="BUILD_DM1_PV_PROJECT_COST">
<sub-workflow>
<app-path>${oozieAppsRoot}/${projectCostScriptName}</app-path>
<propagate-configuration/>
</sub-workflow>
<ok to="dataclean-joining"/>
<error to="fail"/>
</action>
<action name="BUILD_DM1_PV_PROJECT_DEVICE">
<sub-workflow>
<app-path>${oozieAppsRoot}/${projectDeviceScriptName}</app-path>
<propagate-configuration/>
</sub-workflow>
<ok to="dataclean-joining"/>
<error to="fail"/>
</action>
<kill name="fail">
<message>Hive failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end"/>
</workflow-app>
BUILD_DM1_PV_PROJECT_COST/job.properties
oozie.use.system.libpath=true
oozie.wf.application.path=${oozieAppsRoot}/${projectCostScriptName}
BUILD_DM1_PV_PROJECT_COST/workflow.xml
<?xml version="1.0" encoding="UTF-8"?>
<workflow-app xmlns="uri:oozie:workflow:0.5" name="wf-${moduleName}-${projectName}-${projectCostScriptName}">
<start to="START-BUILD_DM1_PV_PROJECT_COST"/>
<action name="START-BUILD_DM1_PV_PROJECT_COST">
<hive xmlns="uri:oozie:hive-action:0.5">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<job-xml>${hiveSiteXml}</job-xml>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>${thriftAddress}</value>
</property>
</configuration>
<script>${oozieScriptsRoot}/${projectCostScriptName}.sql</script>
</hive>
<ok to="end"/>
<error to="fail"/>
</action>
<kill name="fail">
<message>Hive failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end"/>
</workflow-app>
BUILD_DM1_PV_PROJECT_DEVICE/job.properties
oozie.use.system.libpath=true
oozie.wf.application.path=${oozieAppsRoot}/${projectDeviceScriptName}
BUILD_DM1_PV_PROJECT_DEVICE/workflow.xml
<?xml version="1.0" encoding="UTF-8"?>
<workflow-app xmlns="uri:oozie:workflow:0.5" name="wf-${moduleName}-${projectName}-${projectDeviceScriptName}">
<start to="START-BUILD_DM1_PV_PROJECT_DEVICE"/>
<action name="START-BUILD_DM1_PV_PROJECT_DEVICE">
<hive xmlns="uri:oozie:hive-action:0.5">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<job-xml>${hiveSiteXml}</job-xml>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>${thriftAddress}</value>
</property>
</configuration>
<script>${oozieScriptsRoot}/${projectDeviceScriptName}.sql</script>
</hive>
<ok to="end"/>
<error to="fail"/>
</action>
<kill name="fail">
<message>Hive failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end"/>
</workflow-app>
优质内容筛选与推荐>>