定时启动作业的方式可以使用oozie的coord来完成,项目工程结构如下,其中swda-wf下的coordinator.xml是定时作业的实现。
1,coordinator.xml文件
其中只能包括workflow action,需要在同级目录中存在workflow.xml文件,可是实现动态参数的传递(由oozie平台提供动态参数)。
定时执行需要根据四个参数来决定<start,end,frequency,timezone>
start:设置job的开始执行时间,一般设置为当前时间,如果是以前的时间,会起一些脏批次。
end:job的结束时间
frequency:job执行的周期,coord有一些好用的el表达式
timezone:时区,oozie默认是utc,需要调整到东8区
<?xml version="1.0" encoding="UTF-8"?>
<coordinator-app name="w_coord" frequency="${coord:minutes(60)}" start="${start}" end="${end}" timezone="Asia/Shanghai" xmlns="uri:oozie:coordinator:0.2">
<action>
<workflow>
<app-path>${workflowAppUri}</app-path>
<configuration>
<property>
<name>jobTracker</name>
<value>${jobTracker}</value>
</property>
<!-- <property>
<name>etlDate</name>
<value>${coord:formatTime(coord:dateOffset(coord:nominalTime(), -1, 'DAY'), 'yyyy-MM-dd')}</value>
</property> -->
<property>
<name>etlDate</name>
<value>${coord:formatTime(coord:nominalTime(), 'yyyy-MM-dd')}</value>
</property>
</configuration>
</workflow>
</action>
</coordinator-app>
正确起批后,可以在oozie的元数据中查看到,表名为coord_actions.
2,启动命令
和workflow启动命令相同,只是在job.properties中的参数不同,注意加粗的关键字,workflow action的为wf。
oozie.coord.application.path=${nameNode}/user/${user.name}/${sdaRoot}/swda-oozie/swda-wf