开发者学堂课程【Oozie 知识精讲与实战演练:Apache Ooie--实战操作-定时调度任务】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/716/detail/12791
Apache Oozie--实战操作--定时调度任务
内容介绍
一、Oozie 定时任务调度
二、基于时间的调度任务如何配置
三、具体的相关配置
四、修改 coordinator.xml
五、修改 workflow.xml
六、把配置的文件夹上传到 hdfs 指定的路径当中
一、Oozie 定时任务调度
1.Oozie 本身的 workflow 并不能满足于定时周期性的执行,因此需要一个协调者来支撑,这个协调者被称为 Coordinator。Coordinator 模块主要通过 xml 文件来进行相关配置。通过它里面配置的属性,就可以控制工作流程、方式和周期重复的执行。
2.在 Oozie 中,Coordinator 的调度主要有两种实现方式。
(1)第一种是基于时间的定时任务调度。即指定三个参数,第一个是起始时间,第二个是结束时间,第三个是调度频率,那么它会在时间范围内按照指定的频率,周期性地重复地去执行工作流程。这种方式使用率最高;
(2)第二种是基于数据的任务调度,即检测输入数据是否已准备好,只有准备好,有了数据,才会触发任务的执行。
二、基于时间的调度任务如何配置
1.使用官方自带的模板,在它的安装包下有个 examples 文件夹,里面有个 cron 文件,这里面有定时调度的各种配置的模板,下面以
cd /export/servers/oozie-4.1.θ-cdh5.14.θ
cp -r expmples/apps/cron oozie_works/cron-job
为例来做相关的修改。
首先,先定到安装包的根目录图片,然后把例子中的 cron 文件夹完整地拷贝到工作路径,重命名为 cron-job 并直接复制。
(2)第二步:拷贝 hello.sh 脚本
以调度 shell 周期性地执行为例,
cd /export/servers/oozie-4.1.θ-cdh5. 14.θ/oozie_ works
cp shell/hello. sh cron-job/
把它进行复制。
复制完成之后,打开定时任务的文件夹。这里面除了第一个没有文件,其他的正好跟之前调度的 shell 脚本完全一致。一个是 job 任务的时间配置,还有一个是工作流程的 xml 文件。如果没有上面的 coordinator .xml,那么下面的三个就是普通的 oozie 工作流程。但是它们三个并不能满足于周期性地触发执行。这时就需要协调者 xml 文件来控制他们如何进行周期性地执行。
三、具体的相关配置
使用 vi 编辑器,建议大家使用远程配置,或者把这些配置文件下载到本地,然后再把它上传过来。使用 Notepad++ 远程编辑。打开 Notepad++ ,选择刷新。在 oozie_works 下有个刚才创建的 cron-job。首先,编辑 job.properties 的属性信息。双击 job.properties 文件夹,这里面主要是一些提交任务当中的相关属性。
oozie.coord.application.path=${nameNode}/user/${user.name}/${examplesRoot}/cron-job/coordinator.xml
这个参数叫做 coord.application.path,这个参数指定的是 coordinator.xml 文件的路径。这个路径必须要指定正确。
#start:必须设置为未来时间,否则任务失败
start=2019-05-22T19:20+0800
end=2019-08-22T19:20+0800
EXEC= hello.sh
workflowAppUri=${nameNode}/user/${user.name}/${examplesRoot}/cron-job/workflow.xml
上面是设置定时的起始和结束时间。针对时间设置,有两点需要特别强调,第一是时间的格式,之前已经修改了工作的时区为东八区,所以时间格式必须按照这种方式去写,后面有+800,而且周边没有空格。第二点是开始的时间必须是未来的时间,不可能从过去的时间开始调度,因为此时会出现任务出错。然后配置的脚本名称是 shell 脚本名称,跟上面拷贝的保持一致。
四、修改 coordinator.xml
首先,回到编辑当中。第一个是 nameNode 的地址,进行修改。第二个 jobTracker 的地址也进行修改。第三个 queueName 默认为 default 不需要修改。文件夹 exampleRoot 叫 oozie_works,需要修改。接下来是 cordinator 的路径,它位于 userRoot 下的 oozie works 下的 cron-job 下的 coordinator.xml,对其进行修改。再复制上两个时间格式并粘贴,修改时间为将来的时间,比如
start=2019-06-09T13:00+0800
end=2019-06-09T19:20+0800
因此它会从2019年6月9日13:00开始,到2019年6月9日19:20结束,并在这个时间范围内周期性地执行。但是此时并没有配置合种方式进行周期性。修改好之后指定任务名称为 hello.sh。 最后修改 workflow.xml 文件的路径,直接复制粘贴,并检查是否粘贴错误。
修改 coordinator.xml 文件即协调者文件的属性信息。需要修改名字为 cron-job 或者自己重新取个名字,但后面使用时需要保持一致。然后修改周期的频率 frequency。有两种表达频率的方式,第一种是 frequency="${coord:minutes(1)}"。minutes 可以换成 hours, days 等。第二种方式为frequency="10 9* * *" 每天上午的09:10:00开始执行任务
frequency="01 * * *" 每天凌晨的01:00开始执行任务
还需要修改起始时间和结束时间。
五、修改 workflow.xml
以调度一个 shell 脚本为例。需要在 xmlns 指定文件执行的名字和路径。
${jobTracker}
${nameNode}
mapred.job.queue.name
${queueName}
${EXEC}
/user/root/oozie_ works/cron-job/${EXEC}#${EXEC}
把上面复制这段程编码复制过去。
六、把配置的文件夹上传到 hdfs 指定的路径当中
先回到上一级目录当中,
然后使用 put 操作就完成了。
上传过去后可以通过浏览器进行查看。
使用 oozie 自带的进行提交,提交后不会立即执行,必须满足调度。检查一下调度的解析配置是否正确:选择 Coordinator Jobs
点击刷新按钮,等他加载。点击工作流程,弹出一个对话框。
对话框里有定时调度的相关的编号、名字、状态时间。下面有执行的计划,可以看到每分钟执行一次。计划的状态那一栏由 Wating 变成 Running 再变成 Suceed。
提交完后,检查是否能执行。其中有一些细节需要注意,比如-这个符号很有可能中英文符号混用。