oozie4.1.x 定时执行shell脚本 作者:马育民 • 2021-04-21 18:15 • 阅读:10230 # 说明 使用 oozie 更多的应用场景是 执行定时任务 # 创建 工作目录 在 `/program/oozie-4.1.0-cdh5.14.0` 目录下创建 `oozie_apps` 目录 ``` cd /program/oozie-4.1.0-cdh5.14.0 ``` ``` mkdir oozie_apps ``` # 编写shell ### 创建 目录 在 `oozie_apps` 目录下创建 `std3_timer` 目录 ``` cd oozie_apps ``` ``` mkdir std3_timer ``` ``` cd std3_timer ``` ### 编写脚本 ``` vim test_oozie.sh ``` 内容如下: ``` echo hello world >> /program/oozie_hello.txt ``` ### 测试脚本是否可执行 修改权限: ``` chmod 777 test_oozie.sh ``` 执行脚本: ``` ./test_oozie.sh ``` 执行结果:在 `/program/` 目录下生成 `oozie_hello.txt` 文件,内容是: ``` hello world ``` 最后一定要删除 `/program/oozie_hello.txt` 文件,不然验证 oozie是否正确执行该脚本 # 编写 job.properties 在 `std3_timer` 目录下创建 `job.properties` 文件 ``` vim job.properties ``` 内容如下: ``` nameNode=hdfs://hadoop1:8020 jobTracker=hadoop2:8032 queueName=default examplesRoot=oozie_apps oozie.coord.application.path=${nameNode}/${examplesRoot}/std3_timer/coordinator.xml # 必须设置为未来时间 start=2021-11-21T18:50+0800 end=2022-11-21T18:25+0800 EXEC=test_oozie.sh workflowAppUri=${nameNode}/${examplesRoot}/std3_timer/workflow.xml shellpath=/${examplesRoot}/std3_timer/${EXEC} ``` **解释:** - start:开始时间,一定要 **未来时间**,否则会出问题,见 [链接](https://www.malaoshi.top/show_1IX2IaSBEt6A.html "链接") - end:结束时间,也要未来时间 - workflowAppUri:hdfs上的 `workflow.xml` 路径 - nameNode:namenode ip、port - jobTracker:resources Manager ip、port - queueName:默认队列 - examplesRoot:工作目录 - oozie.coord.application.path:hdfs上的 `coordinator.xml` 路径 - EXEC:要执行的脚本 - shellpath:shell脚本在 hdfs 上的路径 # 编写 workflow.xml 在 `std3_timer` 目录下创建 `workflow.xml` 文件 ``` vim workflow.xml ``` 内容如下: ``` ${jobTracker} ${nameNode} mapred.job.queue.name ${queueName} ${EXEC} ${shellpath} ``` # 编写 coordinator 在 `std3_timer` 目录下创建 `coordinator.xml` 文件 ``` vim coordinator.xml ``` ``` ${workflowAppUri} jobTracker ${jobTracker} nameNode ${nameNode} queueName ${queueName} ``` **解释:** - `${coord:minutes(1)}`:启动间隔时间,[有两种表示方法](https://www.malaoshi.top/show_1IX2IazM3IU1.html "有两种表示方法") - `timezone`:设置东8时区 # 上传到 hdfs ``` cd /program/oozie-4.1.0-cdh5.14.0/ ``` ``` hadoop fs -put oozie_apps / ``` ### 重新上传 重新上传需要先删除 hdfs 的相关文件夹 ``` hadoop fs -rm -r /oozie_apps/std3_timer ``` # 执行 ``` cd /program/oozie-4.1.0-cdh5.14.0 ``` ``` bin/oozie job -oozie http://hadoop3:11000/oozie -config oozie_apps/std3_timer/job.properties -run ``` **解释:** - `oozie_apps/std3_timer/job.properties`:本机 `job.properties` 所在的路径 写绝对路径也可以:`/program/oozie-4.1.0-cdh5.14.0/oozie_apps/std3_timer/job.properties` # 在 oozie web查看 访问 http://hadoop3:11000 在 Coordinator 标签中可以查看结果: [](https://www.malaoshi.top/upload/pic/oozie/Snipaste_2021-11-21_18-58-16.png) [](https://www.malaoshi.top/upload/pic/oozie/Snipaste_2021-11-21_19-01-26.png) # 在 yarn 查看结果 访问:http://hadoop2:8088/ 每次启动一个 MapReduce 程序运行,由 yarn 分配 运行在哪个节点上 [](https://www.malaoshi.top/upload/pic/oozie/Snipaste_2021-11-19_00-12-35.png) # 在服务器查看生成的文件 根据上图的提示,到 hadoop3 的 `/program` 目录下查找 `oozie_hello.txt` 文件,如果有该文件,说明任务成功 # 每次创建12个任务 [](/upload/0/0/1IX4SWXiyHb8.png) # 杀死任务 ``` bin/oozie job -oozie http://hadoop3:11000/oozie -kill 0000004-211126111024680-oozie-root-C ``` **解释:** `0000004-211126111024680-oozie-root-C` 就是启动任务时显示的 job id,如下图: [](https://www.malaoshi.top/upload/pic/oozie/Snipaste_2021-11-26_15-06-21.png) 原文出处:http://malaoshi.top/show_1IX2Gip3JqX8.html