大数据工具——oozie调度
·
一、 基础命令
#提交任务。-config是指定oozie任务的job.properties文件位置,submit是提交任务,每次提交任务后会把任务放到服务器并生产一个jobId,但是并不会运行这个任务
oozie job -oozie http://namenode.com:11000/oozie -config /root/test1/job.properties -submit
#执行该任务,0000000-180927111227906-oozie-oozi-W这个是jobId,每个任务的id是唯一的,这个是由提交任务之后产生的
oozie job -oozie http://namenode.com:11000/oozie -start 0000002-211008094443862-oozie-oozi-W
#运行该任务,运行=提交+执行
oozie job -oozie http://namenode.com:11000/oozie -config /root/test1/job.properties -run
# 后边加上 -D 可以代替job.properties中参数
oozie job -oozie http://namenode.com:11000/oozie -run -D oozie.use.system.libpath=true
#查看任务的信息,可以查看到每个执行项状态
oozie job -oozie http://nn.com:11000/oozie -info 0000017-211008094443862-oozie-oozi-W
#查看任务的日志,可以查看每个任务的输出内容及日志内容
oozie job -oozie http://namenode.com:11000/oozie -log 0000008-211008094443862-oozie-oozi-W
#可以查看任务的指定项的状态,比如查看action的name为process-select的执行状态
oozie job -oozie http://namenode.com:11000/oozie -info 0000023-211008094443862-oozie-oozi-C@1
#杀死任务
oozie job -oozie http://namenode.com:11000/oozie -kill 0000008-211008094443862-oozie-oozi-W
二、配置文件
配置文件只是用来讲解方便,不能直接拿来使用,官网上有打包好的任务
1.job.properties
#hsfs端口地址
nameNode=hdfs://hgdp-001:8020
#resourceManager的端口
jobTracker=hgdp-001:8032
#oozie队列
queueName=default
#输入参数
input=2017-05-09
#自定义目录
hdfspath=user/root
#自定义全局目录
examplesRoot=ocn-itv-oozie
#是否启动系统lib库
oozie.use.system.libpath=True
#参数设置
sparkopts=--executor-memory 1G
#coordinator任务开始时间
start=2017-09-04T00:05+0800
#coordinator任务结束时间
end=2017-09-04T00:36+0800
start2=2017-09-01T00:06+0800
end2=2017-09-04T00:36+0800
#用户自定义lib库(存放jar包)
oozie.libpath=${nameNode}/${hdfspath}/${examplesRoot}/lib/
workflowAppUri=${nameNode}/${hdfspath}/${examplesRoot}/wf/spark/fork/
#coordinator定时调度对应的workflow.xml所在目录
workflowAppUri2=${nameNode}/${hdfspath}/${examplesRoot}/wf/spark/single/
appPath=${nameNode}/${hdfspath}/${examplesRoot}/cd/single/
#bundle调用对应的coordinator.xml所在目录
appPath2=${nameNode}/${hdfspath}/${examplesRoot}/cd/single1/
#bundle.xml所在目录
oozie.bundle.application.path=${nameNode}/${hdfspath}/${examplesRoot}/bd/bd1/
2.coordinator.xml
<coordinator-app name="spark_hour_coordinator"
frequency="05 * * * *" <!-- 定时器,分时月日年-->
start="2022-01-07T00:00+0800" end="2022-01-08T00:00+0800" <!-- 起始时间,终止时间-->
timezone="GMT+08:00"<!-- 时差-->
xmlns="uri:oozie:coordinator:0.2">
<controls>
<timeout>60</timeout><!-- 超时时间-->
<concurrency>1</concurrency><!-- 并发任务数-->
</controls>
<datasets><!-- 主要用来配置HDFS上的数据目录和文件-->
<dataset name="InputPrefix" frequency="${coord:hours(1)}"
initial-instance="${log_start_time}" timezone="GMT+08:00">
<uri-template>${input_prefix}/${YEAR}${MONTH}${DAY}</uri-template><!-- 传参形式表示,可以写绝对路径-->
<done-flag></done-flag>
</dataset>
<dataset name="OutputPrefix" frequency="${coord:hours(1)}"
initial-instance="${log_start_time}" timezone="GMT+08:00">
<uri-template>${output_prefix}</uri-template>
<done-flag></done-flag>
</dataset>
</datasets>
<input-events><!-- 满足条件才会触发执行,需使用dataset实例-->
<data-in name="INPUT_PREFIX" dataset="InputPrefix">
<instance>${coord:current(-2)}</instance><!-- 定时任务时间-2小时-->
</data-in>
</input-events>
<output-events><!-- 满足条件才会触发执行,需使用dataset实例-->
<data-out name="OUTPUT_PREFIX" dataset="OutputPrefix">
<instance>${coord:current(+5)}</instance><!-- 定时任务时间+5小时-->
</data-out>
</output-events>
<action>
<workflow><!-- -->
<app-path>${wf_application_path}</app-path><!-- hdfs上jar路径-->
<configuration>
<property>
<name>WF_INPUT</name><!-- 定义输入路径-->
<value>
${coord:dataIn('INPUT_PREFIX')}/${coord:formatTime(coord:dateOffset(coord:nominalTime(), -2, 'HOUR'), 'HH')}*
</value>
</property>
<property>
<name>WF_OUTPUT</name>
<value>
${coord:dataOut('OUTPUT_PREFIX')}/stat-data/hour/${coord:formatTime(coord:dateOffset(coord:nominalTime(), -2, 'HOUR'), 'yyyyMMdd')}/${coord:formatTime(coord:dateOffset(coord:nominalTime(), -2, 'HOUR'), 'HH')}
</value>
<property>
<name>CURRENT_DATE</name>
<value>${coord:formatTime(coord:dateOffset(coord:nominalTime(), -2, 'HOUR'), 'yyyyMMdd')}</value>
</property>
<property>
<name>CURRENT_HOUR</name>
<value>${coord:formatTime(coord:dateOffset(coord:nominalTime(), -2, 'HOUR'), 'HH')}</value>
</property>
</property>
<name>oozie.use.system.libpath</name>
<value>true</value>
</property>
</configuration>
</workflow>
</action>
</coordinator-app>
3.workflow.xml
<workflow-app name="wf_hour_${CURRENT_DATE}${CURRENT_HOUR}" xmlns="uri:oozie:workflow:0.5">
<global><!-- 指定yarn队列名,可省略-->
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>root</value>
</property>
</configuration>
</global>
<start to="wf1"/><!-- 从那个action开始-->
<action name="update_resfile"><!-- ssh action-->
<ssh xmlns="uri:oozie:ssh-action:0.1">
<host>${ssh_user}@${ssh_ip}</host>
<command>sh ${shell_dir}/upload.sh</command>
<capture-output/>
</ssh>
<ok to="join-wf"/><!--成功了执行哪个action-->
<error to="join-wf"/><!--失败了执行哪个action-->
</action>
<join name="join-wf" to="fork-wf"/>
<fork name="fork-wf"><!--同步执行action-->
<path start="wf2" />
<path start="decision-wf" />
</fork>
<action name="wf2"><!-- spark action-->
<spark xmlns="uri:oozie:spark-action:0.1"><!-- -->
<job-tracker>${job_tracker}</job-tracker><!-- yarn地址-->
<name-node>${name_node}</name-node><!-- hdfs地址-->
<prepare><!-- 执行任务前删除原有路径文件-->
<delete path="${name_node}${OUTPUT}/"/>
</prepare>
<master>yarn-cluster</master><!-- spark任务配置-->
<mode>cluster</mode>
<name>HttpTraceBase_${CURRENT_DATE}${CURRENT_HOUR}</name>
<class>Test</class>
<jar>${jar_path}</jar>
<spark-opts>--driver-memory 2g num-executors 100 --executor-memory 2g --executor-cores 2 --conf spark.network.timeout=1000</spark-opts>
<arg>${WF_INPUT}/*</arg><!-- 作业参数-->
<arg>${WF_OUTPUT}/</arg>
</spark>
<ok to="end"/>
<error to="kill"/>
</action>
<decision name="decision-wf">
<switch>
<case to="wf3">${wf:conf('IF_EXSIT') eq "true"}</case><!-- 当参数为true时执行wf3-->
<default to="end"/>
</switch>
</decision>
<action name="wf3">
<ssh xmlns="uri:oozie:ssh-action:0.1">
<host>${ssh_user}@${ssh_ip}</host>
<command>sh ${shell_dir}/day.sh</command>
</ssh>
<ok to="end"/>
<error to="end"/>
</action>
<kill name="kill">
<message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end"/>
</workflow-app>
参考博客:
oozie详解:里边部分配置讲解更详细
更多推荐
所有评论(0)