Azkaban中的參數詳解
參數傳遞是調度字體工作流運行時非常重要的一部分,工作流的執行,單個作業的執行,多個工作流之間的依賴執行,歷史人物重算,都涉及到參數傳遞和同步。
azkaban的工作流中的參數可以分爲如下幾個類型:
1: Azkaban UI 頁面輸入參數
2: 環境變量參數
3:job作業文件中定義的參數
4:工作流的用戶定義的屬性文件,上游作業傳遞給下游的參數
5:工作流運行時產生的系統參數
6:job的common參數
以下是參數類型與其對應的參數範圍:
參數類型 | 參數的作用域 |
---|---|
UI 頁面輸入參數 ,即工作流參數 | flow全局有效 |
工作流ZIP壓縮包中的屬性文件 | flow全局有效,zip文件目錄以及子目錄有效 |
工作流運行時參數 | flow全局有效 |
環境變量參數 | flow全局有效 |
job的common參數 | job內局部有效 |
JOB文件中定義的參數 | job內局部有效 |
上游作業傳遞給下游的參數 | job內局部有效 |
其中,全局參數,在整個工作流的作業文件配置中,都可以通過 ${參數名} 的方式引用使用。
job配置中的參數
commod參數配置
除了typem,commond,decpendencies三個參數外,還有如下一些保留參數可以爲每個job配置
參數 | 說明 |
retries | 失敗的job的自動重試的次數 |
retry.backoff | 重試的間隔(毫秒) |
working.dir | 指定命令被調用的目錄。默認的working目錄是executions/${execution_ID}目錄 |
env.property | 指定在命令執行前需設置的環境變量。Property定義環境變量的名稱, 因此 env.VAR_NAME=VALUE就創建了一個$VAR_NAME環境變量 並且指定了它的VALUE |
failure.emails | job失敗時發送的郵箱,用逗號隔開 |
success.emails | job成功時發送的郵箱,用逗號隔開 |
notify.emails | job成功或失敗都發送的郵箱,用逗號隔開 |
一個flow的email屬性,只會取最後一個job的配置,其他的job的email配置將會被忽略。
單個job的創建
創建job很簡單,只要創建一個以.job結尾的文本文件就行了,例如我們創建一個工作,用來打印hello world,名字叫做command.job
#command.job
type=command
command=echo 'hello world'
一個簡單的job就創建好了,解釋下,type的command,告訴azkaban用unix原生命令去運行,比如原生命令或者shell腳本,當然也有其他類型。
一個工程不可能只有一個job,我們現在創建多個依賴job,這也是採用azkaban的首要目的。
多個command類型多job工作流flow
jobs和它們的依賴組成flow。怎麼創建依賴,只要指定dependencies參數就行了。比如導入hive前,需要進行數據清洗,數據清洗前需要上傳,上傳之前需要從ftp獲取日誌。
比如定義5個job:
1:o2o_2_hive.job:將清洗完的數據入hive庫
2:o2o_clean_data.job:調用mr清洗hdfs數據
3:o2o_up_2_hdfs.job:將文件上傳至hdfs
4:o2o_get_file_ftp1.job:從ftp1獲取日誌
5:o2o_get_file_fip2.job:從ftp2獲取日誌
彼此之間依賴關係:
3依賴4和5,2依賴3,1依賴2,4和5沒有依賴關係。
o2o_2_hive.job:
type=command
# 執行sh腳本,建議這樣做,後期只需維護腳本就行了,azkaban定義工作流程
command=sh /job/o2o_2_hive.sh
dependencies=o2o_clean_data
o2o_clean_data.job:
type=command
# 執行sh腳本,建議這樣做,後期只需維護腳本就行了,azkaban定義工作流程
command=sh /job/o2o_clean_data.sh
dependencies=o2o_up_2_hdfs
o2o_up_2_hdfs.job:
type=command
#需要配置好hadoop命令,建議編寫到shell中,可以後期維護
command=hadoop fs -put /data/*
#多個依賴用逗號隔開
dependencies=o2o_get_file_ftp1,o2o_get_file_ftp2
o2o_get_file_ftp1.job:
type=command
command=wget "ftp://file1" -O /data/file1
o2o_get_file_ftp2.job:
type=command
command=wget "ftp:file2" -O /data/file2