本博客一共包含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