1. 程式人生 > >Oozie-coordinator調度

Oozie-coordinator調度

queue provide shanghai ring src .get 時區設置 ext 服務器

當有一個復雜的工作流job,希望每天定時執行,使用crontab方式調用需要編寫大量的腳本,還要通過大量的判斷來控制每個工作流job的執行順序問題。Oozie中的Coordinator可以讓每個工作流workflow當做一個動作來運行,這樣就可以將多個job組織起來,並制定觸發時間和頻率。它的調度方式有兩種:一種是基於時間調度;還有一種是基於數據可用性調度(判斷數據是否存在和是否符合標準)。

    1. 如果要設置基於時間的調度,需要先配置時區,因為oozie默認使用的是UTC時區,服務器默認使用的是CST,我們把他們修改為GMT +0800(當然也可以是其他時區)
      查看系統當前時區:
      技術分享
      23.png
      如果輸出的時區不是+0800,需要進行修改
      $ rm -rf /etc/localtime
      $ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
      修改oozie時區,在oozie-sitexml添加參數
       <property>
           <name>oozie.processing.timezone</name>
           <value>GMT+0800</value>
       </property>
      修改oozie/-server/webapps/oozie/oozie-console.js中的時區設置,不然會影響web界面的時間,修改完成後重啟生效
      function getTimeZone() {
       Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
       return Ext.state.Manager.get("TimezoneId","GMT+0800");
      }
    2. 拷貝模板中的coordinator案例
      $ cp -r examples/apps/cron-schedule/ my-apps/
    3. 修改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}
    4. 修改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>
    5. oozie的默認配置中,至少為每5分鐘執行一次,所以需要修改默認配置
      技術分享
      24.png
    6. 上傳至hdfs後執行
      技術分享
      25.png
    7. 查看執行結果
      技術分享
      27.png
      技術分享

Oozie-coordinator調度