简介
在使用oozie的时候我们经常使用定时任务,oozie给我们提供了调度定时任务的方法,就是Coordinator。目的就是周期性调度任务。
Coordinator调度定时任务
在使用Coordinator调度任务的首要时间就是调整好时区问题。
如果你的服务器使用date -R
显示为:
root@master:~# date -R
Tue, 03 Sep 2019 20:23:57 +0800
有+0800 代表使用的东八区时区(GMT)就是可以的。
如果不是呢么请自行百度修改服务器的时区问题。
修改oozie-site.xml
一定要修改oozie-site.xml
,修改oozie-default.xml
没用的,oozie不使用这个oozie-default.xml
文件,只是一个参考。
在oozie-default.xml
找到 oozie.processing.timezone
这个属性
粘贴到site里面并修改为GMT+0800
,如下图:
修改js框架中的关于时间设置的代码
js文件在/opt/module/oozie-4.0.0-cdh5.3.6/oozie-server/webapps/oozie/oozie-console.js
这个是我的目录
在这个js文件搜索getTimeZone
方法,修改如下图:
重启ooozie服务
root@master:/opt/module/oozie-4.0.0-cdh5.3.6# bin/oozied.sh stop
root@master:/opt/module/oozie-4.0.0-cdh5.3.6# bin/oozied.sh start
如果你打开oozie的web页面还是GMT:
呢么一定要去清楚浏览器的缓存!!!!
job.properties
start
:开始时间 这个时间必须是未来时间 否则oozie就会报错或者崩溃
end
:结束时间 这个时间必须大于开始时间,而且这个时间是coordinator的结束时间,不是你的workflow任务的结束时间,而且如果你想让你的任务一直调度定时 就把这个时间写的大一些
nameNode=hdfs://master:8020
jobTracker=master:8032
queueName=default
examplesRoot=oozie-apps
oozie.coord.application.path=${nameNode}/user/${user.name}/${examplesRoot}/cron
start=2019-09-04T19:25+0800
end=2019-09-04T19:50+0800
# workflow任务目录
workflowAppUri=${nameNode}/user/${user.name}/${examplesRoot}/cron
execFile=p1.sh
workflow.xml
<workflow-app xmlns="uri:oozie:workflow:0.4" name="shell-wf-myc">
<start to="shell-node"/>
<action name="shell-node">
<shell xmlns="uri:oozie:shell-action:0.2">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
</configuration>
<exec>${execFile}</exec>
<file>/user/root/oozie-apps/cron/${execFile}#${execFile}</file>
<capture-output/>
</shell>
<ok to="end"/>
<error to="fail"/>
</action>
<kill name="fail">
<message>Shell action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end"/>
</workflow-app>
p1.sh
#!/bin/bash
date >> /opt/module/p1.log
coordinator.xml
frequency:
频率 这个可以使用oozie的定时表达式也可以是cron表达式 但是最低周期是五分钟
start:
开始时间
end:
结束时间
timezone:
时区
app-path:
workflow运行地址
<coordinator-app name="cron-coord" frequency="${coord:minutes(5)}" start="${start}" end="${end}" timezone="GMT+0800"
xmlns="uri:oozie:coordinator:0.2">
<action>
<workflow>
<app-path>${workflowAppUri}</app-path>
<configuration>
<property>
<name>jobTracker</name>
<value>${jobTracker}</value>
</property>
<property>
<name>nameNode</name>
<value>${nameNode}</value>
</property>
<property>
<name>queueName</name>
<value>${queueName}</value>
</property>
</configuration>
</workflow>
</action>
</coordinator-app>
提交任务
放到HDFS:
root@master:/opt/module/oozie-4.0.0-cdh5.3.6/oozie-apps# hadoop fs -put cron/ /user/root/oozie-apps
提交Oozie:
root@master:/opt/module/oozie-4.0.0-cdh5.3.6# bin/oozie job -oozie http://master:11000/oozie -config oozie-apps/cron/job.properties -run
oozie会在设置的时间段内根据频率把所有的任务都列出来 到了时间就会运行一个
扩展
上面的只是一个简单的配置文件,其实oozie还有很多其他强大的配置,下面是一个官网示例配置
<coordinator-app name="[NAME]" frequency="[FREQUENCY]" start="[DATETIME]" end="[DATETIME]" timezone="[TIMEZONE]" xmlns="uri:oozie:coordinator:0.1">
<controls>
<timeout>[TIME_PERIOD]</timeout>
<concurrency>[CONCURRENCY]</concurrency>
<execution>[EXECUTION_STRATEGY]</execution>
</controls>
<datasets>
<include>[SHARED_DATASETS]</include>
...
<!-- Synchronous datasets -->
<dataset name="[NAME]" frequency="[FREQUENCY]" initial-instance="[DATETIME]" timezone="[TIMEZONE]">
<uri-template>[URI_TEMPLATE]</uri-template>
</dataset>
...
</datasets>
<input-events>
<data-in name="[NAME]" dataset="[DATASET]">
<instance>[INSTANCE]</instance>
...
</data-in>
...
<data-in name="[NAME]" dataset="[DATASET]">
<start-instance>[INSTANCE]</start-instance>
<end-instance>[INSTANCE]</end-instance>
</data-in>
...
</input-events>
<output-events>
<data-out name="[NAME]" dataset="[DATASET]">
<instance>[INSTANCE]</instance>
</data-out>
...
</output-events>
<action>
<workflow>
<app-path>[WF-APPLICATION-PATH]</app-path>
<configuration>
<property>
<name>[PROPERTY-NAME]</name>
<value>[PROPERTY-VALUE]</value>
</property>
...
</configuration>
</workflow>
</action>
</coordinator-app>
具体更详细的内容可以看这个文章:Oozie Coordinator使用及详解