共計 2695 個字符,預計需要花費 7 分鐘才能閱讀完成。
這篇文章主要介紹“Oozie 的 coordinator 怎么配置”,在日常操作中,相信很多人在 Oozie 的 coordinator 怎么配置問題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Oozie 的 coordinator 怎么配置”的疑惑有所幫助!接下來,請跟著丸趣 TV 小編一起來學習吧!
coordinator 是 workflow 的定時提交器,基于時間條件與數據生成觸發(based on time and data triggers)。簡單點說,coordinator 按所定義的時間周期進行輪詢,若數據生成條件滿足,則觸發 workflow 任務;否則,則等待數據生成或跳過(調度策略由設置的超時時間決定)。
coordinator-app
coordinator-app name= coord-demo frequency= ${coord:days(1)} start= ${start_time} end= ${end_time}
timezone= Asia/Shanghai xmlns= uri:oozie:coordinator:0.1
文件頭定義了 coordinator 任務的名稱,執行頻率(frequency),開始與起止時間(start、end)。${coord:days(1)} 為 coordinator 內置的 EL function (Expression Language),表示為執行周期為一天。frequency 的時間單位為分鐘,則 ${coord:days(1)}=1440,${coord:hours(3)}=180. 一般地,在 job.properties 定義如:start_time=2016-06-07T00:00Z,應以 UTC 時區為準。
Control information
controls
!-- 超時時間,若為 0,一旦數據生成超時則 coordinator action 被丟棄; 若為 -1,則一直等待數據生成; 若 0,即為超時時間(單位:分鐘)--
timeout -1 /timeout
!-- 并發 action 數 --
concurrency 1 /concurrency
!-- 同時被觸發的多個 coordinator job 的執行次序 --
execution ${execution_order} /execution
/controls
datasets
datasets
!-- 數據生成目錄 --
dataset name= data frequency= ${coord:hours(1)} initial-instance= ${start_time} timezone= ${timezone}
uri-template ${nameNode}/path/to/${YEAR}-${MONTH}-${DAY}/${HOUR}/ /uri-template
done-flag /done-flag
/dataset
/datasets
相關參數:
initial-instance,對應初始時間的數據目錄,作為時間周期偏移的基準目錄
uri-template,文件目錄 HDFS 目錄,${YEAR}、${MONTH} 等為 EL Time Constants,具體數值由 傳入,也可通過 job.properties 傳入自定義的參數。
done-flag,數據目錄生成的文件標識,若未指定,則默認為 _SUCCESS 文件;若指定為空,則表示文件夾本身。
input-events
input-events
data-in name= dataReady dataset= data
instance ${coord:current(-1)} /instance
/data-in
/input-events
定義了數據觸發條件,${coord:current(-1)} 表示對于當前時間的偏移,其中偏移量 = 數值 * dataset frequency。有些時候,我們要判斷多個目錄是否生成,比如,判斷一天的 24 個小時目錄,這時應這樣寫:
data-in name= dataReady2 dataset= data
start-instance ${coord:current(-24)} /start-instance
end-instance ${coord:current(-1)} /end-instance
/data-in
action
action
workflow
app-path ${wf_app_path} /app-path
configuration
property
name dayTime /name
value ${coord:formatTime(coord:dateOffset(coord:nominalTime(), -1, DAY ), yyyy-MM-dd )} /value
/property
/configuration
/workflow
/action
定義 coordinator 要觸發的 workflow,
app-path,workflow 所在的 HDFS 目錄;
property,定義傳給 workflow 的參數
coordinator 提供了一些用于時間計算的函數,比如:
coord:nominalTime(),返回 coordinator 的每一執行周期的當前時間;
coord:dateOffset(String baseDate, int instance, String timeUnit),計算偏移后的時間,newDate = baseDate + instance * timeUnit;
coord:formatTime(String ts, String format),定義格式化的時間,其中 format 應遵循 Java s SimpleDateFormat。
返回多個時間:
value ${coord:formatTime(coord:dateOffset(coord:dateOffset(coord:nominalTime(), -12, HOUR ), -6, DAY ), yyyy-MM-dd )},${coord:formatTime(coord:dateOffset(coord:dateOffset(coord:nominalTime(), -12, HOUR ), -5, DAY ) /value
到此,關于“Oozie 的 coordinator 怎么配置”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注丸趣 TV 網站,丸趣 TV 小編會繼續努力為大家帶來更多實用的文章!