【Oozie】CDH是如何通過Hue提交Oozie定時任務的?

【原文鏈接】https://www.cnblogs.com/mr-ivan/p/6593550.html

 

提交oozie定時作業

 1、進入hue界面,點擊workflows工作流,編輯workflows。

 

2、點擊create創建工作流。

 

3、本文以hive2作業sql任務爲例,拖拽hive2到action區域。

 

4、例子是爲車次表每天定時添加指定分區,分區爲動態傳參傳入,和腳本類似,參數取值用${}包圍。具體sql如下:

複製代碼

CREATE TABLE if NOT EXISTS dw_serv_checi_query_day (
user_id           string,
railway_no        string,
start_station     string 
) PARTITIONED BY (
dt STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE;
ALTER TABLE dw_serv_checi_query_day  ADD PARTITION (dt = ${partdt});

複製代碼

保存爲addpart.sql,上傳hdfs,通過hue上傳很方便。選中上傳的文件,要給出參數值,不能省略,否自運行時${}講不會被轉義。這裏值依然用${}包圍,是因爲具體值會在Coordinator中傳入。保存workflow。

 

5、創建coordinator,

 

選擇剛纔創建的workflows,選擇定時時間,可以選擇每日,每週,每月等等,選擇任務有效期,最後要給出之前參數的值,這裏的值是代表前一天的日期,oozie有一些內置的常量。保存提交,OK,定時任務完成了。

 

 

 這樣就會在每天凌晨一點鐘給車次表添加一個分區,分區值爲前一天的日期,運行狀態如下圖

 

oozie常用的系統常量

常量表示形式 含義說明
${coord:minutes(int n)} 返回日期時間:從一開始,週期執行n分鐘
${coord:hours(int n)} 返回日期時間:從一開始,週期執行n * 60分鐘
${coord:days(int n)} 返回日期時間:從一開始,週期執行n * 24 * 60分鐘
${coord:months(int n)} 返回日期時間:從一開始,週期執行n * M * 24 * 60分鐘(M表示一個月的天數)
${coord:endOfDays(int n)} 返回日期時間:從當天的最晚時間(即下一天)開始,週期執行n * 24 * 60分鐘
${coord:endOfMonths(1)} 返回日期時間:從當月的最晚時間開始(即下個月初),週期執行n * 24 * 60分鐘
${coord:current(int n)} 返回日期時間:從一個Coordinator動作(Action)創建時開始計算,第n個dataset實例執行時間
${coord:dataIn(String name)} 在輸入事件(input-events)中,解析dataset實例包含的所有的URI
${coord:dataOut(String name)} 在輸出事件(output-events)中,解析dataset實例包含的所有的URI
${coord:offset(int n, String timeUnit)} 表示時間偏移,如果一個Coordinator動作創建時間爲T,n爲正數表示向時刻T之後偏移,n爲負數向向時刻T之前偏移,timeUnit表示時間單位(選項有MINUTE、HOUR、DAY、MONTH、YEAR)
${coord:hoursInDay(int n)} 指定的第n天的小時數,n>0表示向後數第n天的小時數,n=0表示當天小時數,n<0表示向前數第n天的小時數
${coord:daysInMonth(int n)} 指定的第n個月的天數,n>0表示向後數第n個月的天數,n=0表示當月的天數,n<0表示向前數第n個月的天數
${coord:tzOffset()} ataset對應的時區與Coordinator Job的時區所差的分鐘數
${coord:latest(int n)} 最近以來,當前可以用的第n個dataset實例
${coord:future(int n, int limit)} 當前時間之後的dataset實例,n>=0,當n=0時表示立即可用的dataset實例,limit表示dataset實例的個數
${coord:nominalTime()} nominal時間等於Coordinator Job啓動時間,加上多個Coordinator Job的頻率所得到的日期時間。例如:start=”2009-01-01T24:00Z”,end=”2009-12-31T24:00Z”,frequency=”${coord:days(1)}”,frequency=”${coord:days(1)},則nominal時間爲:2009-01-02T00:00Z、2009-01-03T00:00Z、2009-01-04T00:00Z、…、2010-01-01T00:00Z
${coord:actualTime()} Coordinator動作的實際創建時間。例如:start=”2011-05-01T24:00Z”,end=”2011-12-31T24:00Z”,frequency=”${coord:days(1)}”,則實際時間爲:2011-05-01,2011-05-02,2011-05-03,…,2011-12-31
${coord:user()} 啓動當前Coordinator Job的用戶名稱
${coord:dateOffset(String baseDate, int instance, String timeUnit)} 計算新的日期時間的公式:newDate = baseDate + instance * timeUnit,如:baseDate=’2009-01-01T00:00Z’,instance=’2′,timeUnit=’MONTH’,則計算得到的新的日期時間爲’2009-03-01T00:00Z’。
${coord:formatTime(String timeStamp, String format)} 格式化時間字符串,format指定模式

 

例如,昨天的日期就可以寫爲昨天日期 ${coord:formatTime(coord:dateOffset(coord:nominalTime(), -1, 'DAY'), 'yyyyMMdd')}

 

問題與解決辦法

 

oozie會存在時區問題,默認會與中國時間會相差8個小時,這就需要oozie的時區,我使用的是cdh,所以設置很方便,進入cm的管理界面,進入oozie的設置,添加配置:

 

保存,重啓,問題解決。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章