Oozie-coordinator調度
阿新 • • 發佈:2017-05-04
queue provide shanghai ring src .get 時區設置 ext 服務器
當有一個復雜的工作流job,希望每天定時執行,使用crontab方式調用需要編寫大量的腳本,還要通過大量的判斷來控制每個工作流job的執行順序問題。Oozie中的Coordinator可以讓每個工作流workflow當做一個動作來運行,這樣就可以將多個job組織起來,並制定觸發時間和頻率。它的調度方式有兩種:一種是基於時間調度;還有一種是基於數據可用性調度(判斷數據是否存在和是否符合標準)。
- 如果要設置基於時間的調度,需要先配置時區,因為oozie默認使用的是UTC時區,服務器默認使用的是CST,我們把他們修改為GMT +0800(當然也可以是其他時區)
查看系統當前時區:
23.png
如果輸出的時區不是+0800,需要進行修改
修改oozie時區,在oozie-sitexml添加參數$ rm -rf /etc/localtime $ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
修改oozie/-server/webapps/oozie/oozie-console.js中的時區設置,不然會影響web界面的時間,修改完成後重啟生效<property> <name>oozie.processing.timezone</name> <value>GMT+0800</value> </property>
function getTimeZone() { Ext.state.Manager.setProvider(new Ext.state.CookieProvider()); return Ext.state.Manager.get("TimezoneId","GMT+0800"); }
- 拷貝模板中的coordinator案例
$ cp -r examples/apps/cron-schedule/ my-apps/
- 修改job.properties
nameNode=hdfs://bigdata-00:8020 jobTracker=bigdata-00:8032 queueName=default examplesRoot=user/wulei/my-apps/cron-schedule # 定義coordinate路徑 oozie.coord.application.path=${nameNode}/${examplesRoot} start=2016-11-13T12:30+0800 end=2016-11-13T13:30+0800 # 定義workflow路勁 workflowAppUri=${nameNode}/${examplesRoot}
- 修改coorndinate.xml,讓這個任務從開始時間到結束時間內每分鐘執行一次
<coordinator-app name="cron-coord" frequency="${coord:minutes(1)}" 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>
- oozie的默認配置中,至少為每5分鐘執行一次,所以需要修改默認配置
24.png - 上傳至hdfs後執行
25.png - 查看執行結果
27.png
Oozie-coordinator調度