oozie调用sub-workflow串联工作流

注意

  1. 这里调度配置文件需要全部上传到hdfs,这个路径通过oozieAppsRoot指定
  2. sql文件需要全部上传的hdfs,这个路径通过oozieScriptsRoot指定

配置文件

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>
posted @ 2018-12-13 13:53  shenjie2017  阅读(270)  评论(0编辑  收藏  举报