oozie 用法说明

本博客一共包含ooize workflow流程写法,job.properties 文件配置,ooize 任务的启动与杀死。

oozie 流程定义:

1.workflow 的开始和workflow 的命名

<workflow-app xmlns="uri:oozie:workflow:0.2" name="adx-wf">
<start to="adx_clean_forking"/>

说明:

    在xmls属性中定义了workflow的版本为0.4,workflow的版本不能高于oozie兼容的最高版本,可以降低

2.决定另外一个workflow 运行的频率并且调用另外一个workflow:

<decision name="is_23hour">
        <switch>
            <case to="day_offline_wf_node">
                ${hour eq 23}
            </case>
            <default to="vivo_datasynch_sqoop_join_node" />
        </switch>
    </decision> 

<action name="day_offline_wf_node">
        <sub-workflow>
            <app-path>${nameNode}/user/oozie/jutou/datasynch/day_offline_wf</app-path>
            <propagate-configuration/>
            <configuration>
                <property>
                    <name>mapred.job.queue.name</name>
                    <value>${queueName}</value>
                </property>
            </configuration>
        </sub-workflow>
        <ok to="vivo_datasynch_sqoop_join_node"/>
        <error to="fork-send-error-message"/>
    </action>

3.运行Java 代码:

  <action name="vivo_idea_minutely_temp_node">
        <java>
            <!--jobTracker(ResourceManager)地址-->
            <job-tracker>${jobTracker}</job-tracker> 
            <name-node>${nameNode}</name-node> <!--hdfs 地址-->
            <configuration>
                <property>
                    <name>mapred.job.queue.name</name>
                    <value>${queueName}</value>
                </property>
            </configuration>
            <main-class>com.huanju.realtime.JuTouRealtimeDataSynch</main-class>
            <arg>${jdbcUrl}</arg>
            <arg>${username}</arg>
            <arg>${password}</arg>
            <arg>${today}</arg>
            <arg>${yesterday}</arg>
            <arg>${tomorrow}</arg>
        </java>
        <ok to="vivo_idea_minutely_sqoop_node"/>
        <error to="fork-send-error-message"/>
    </action>

4.oozie 中执行hql 语句

<action name="vivo_feed_report_add_partition_node">
        <hive xmlns="uri:oozie:hive-action:0.2">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <job-xml>my-hive-default.xml</job-xml>
           <!-- 
           <configuration> 
                  <property>
                        <name> 要覆盖hive配置文件中的参数</name>
                        <value>参数值</value>
                   </property>
             </configuration>-->
            <script>hql/vivo_feed_report_add_partitions.hql</script>
            <param>day=${today}</param>
        </hive>
        <ok to="vivo_datasynch_sqoop_join_node"/>
        <error to="fork-send-error-message"/>
    </action>

说明:

prepare 如果需要在hive作业之前创建或删除HDFS目录,则可以增加prepare参数,指定需要创建或删除的HDFS路径。
job-xml 指定hive-site.xml所在HDFS上的路径;如果是CDH搭建的集群,则可以在任何一台hive gateway机器上的/etc/hive/conf目录下找到该配置文件。如果不指定该文件路径,hive action就不work。
configuration 包含传递给hive作业的参数,可以没有这个配置项,这样就全部使用默认配置
script 指定hql脚本所在HDFS上的路径;这个参数是hive action必须的。这个hql脚本中,可以使用${VARIABLES}来表示参数,获取在hive action中定义的param参数配置
param 定义在hql脚本中所需要的变量值

5.在oozie中执行sqoop

<action name="vivo_promotion_info_sqoop_node">
        <sqoop xmlns="uri:oozie:sqoop-action:0.2">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <job-xml>my-sqoop-default.xml</job-xml>
            <command>import --connect "${jdbcUrl}" --username ${username} --password ${password} --table tb_vivo_promotion  --fields-terminated-by \001  -m 1  --columns company_id,plat_promotion_id,plat_promotion_name,daily_budget,startdate,enddate,is_delete,ctime,mtime --target-dir /jutou/original/vivo_promotion  --delete-target-dir  --hive-drop-import-delims --null-string \\N --null-non-string \\N</command>
        </sqoop>
        <ok to="vivo_basic_data_join_node"/>
        <error to="fork-send-error-message"/>
    </action>

6.在oozie中执行邮件发送

<action name="send_email">
        <email xmlns="uri:oozie:email-action:0.1">
            <to>${toEmail}</to>
            <cc>${ccEmail}</cc>
            <subject>[OOZIE FAILED] ${wf:name()}  ${wf:id()} </subject>
            <body>Task failed!
                wfid:${wf:id()}
                Error message:[${wf:errorMessage(wf:lastErrorNode())}].</body>
        </email>
        <ok to="join_send_error_message"/>
        <error to="fail"/>
</action>

7.在oozie中执行shell脚本

<action name="send_wechat">
        <shell xmlns="uri:oozie:shell-action:0.1">
        <job-tracker>${jobTracker}</job-tracker>
        <name-node>${nameNode}</name-node>
        <configuration>
	         <property>
	             <name>mapred.job.queue.name</name>
	             <value>${queueName}</value>
	         </property>
	     </configuration>
	     <exec>weixin.py</exec>
	     <argument>${wechats}</argument>
	     <argument>${nameNode} ${wf:name()} | ${wf:id()} Failed,Please Check it !</argument>
         <file>${nameNode}/${hdfsroot}/weixin.py</file>
         </shell>   
        <ok to="join_send_error_message"/>
        <error to="fail"/>
</action>

  说明:

        <exec>脚本名</exex>是执行脚本的命令, <file>脚本的具体位置</file>存放脚本的位置,可使用相对路径和绝对路径

8.错误终止和成功结束

<kill name="fail">
	<message>failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end" />

job.properties 写法:

#hdfs所在节点和端口
nameNode=hdfs://u007:8020
#RM 所在节点以及端口号
jobTracker=U007:8032
queueName=default
examplesRoot=examples
oozie.usr.system.libpath=true    
#指是否加载用户lib目录
oozie.libpath=${nameNode}/user/oozie/libserver   
#用户lib库所在位置
oozie.wf.application.path=${nameNode}/user/oozie/tt/user_count/wf 
#oozie流程所在hdfs地址即workflow.xml所在地址
hiveMetastore=U006
#发送邮件人和抄送邮件人,多个用逗号隔开
toEmail=
ccEmail=
jdbcUrl=jdbc:mysql://10.10.25.13:3306/tt?useUnicode=true&characterEncoding=utf-8
username=root
password=123456

oozie 任务启动与杀死:

启动oozie任务命令:

oozie job -oozie http://${OOZIE_SERVER}:11000/oozie/ -config ${WORKROOT}/wf/job.properties -run -verbose -Dday=${day} -Dhour=${hour} -Dforce=${force} -Dstartline=${startline} -DbeforeFiveDate=${beforeFiveDate}

OOZIE_SERVER:oozie 所在节点

-config :job.properties 所在目录

-verbose :任务执行所需要的参数,如果没有参数,不写即可

杀死oozie任务命令:

oozie job -oozie http://${OOZIE_SERVER}:11000/oozie -kill job_id

猜你喜欢

转载自blog.csdn.net/learner_up/article/details/86474845