天天看點

azkaban動态傳入作業參數使用介紹

azkaban動态傳入作業參數使用介紹

參數傳遞時排程系統工作流運作時非常重要的一部分,工作流的執行,單個作業的執行,多個工作流之間的依賴執行,曆史任務重算,都涉及參數傳遞和同步.

(1)azkaban的工作流中的參數可以分為如下幾個類型:

1)、azkaban UI 頁面輸入參數, 2)、環境變量參數,

3)、job作業檔案中定義的參數,4)、工作流的使用者定義的屬性檔案,

4)、上遊作業傳遞給下遊的參數,5)、工作流運作時産生的系統參數,

6)、job的common參數等。

(2)參數的作業範圍分類,對目前job有效局部有效,對整個工作流全局有效。

參數類型 參數的作用域
UI 頁面輸入參數 flow全局有效
工作流ZIP壓縮包中的屬性檔案 flow全局有效,zip檔案目錄以及子目錄有效
工作流運作時參數 flow全局有效
環境變量參數 flow全局有效
job的common參數 job内局部有效
JOB檔案中定義的參數 job内局部有效
上遊作業傳遞給下遊的參數 job内局部有效

全局參數,在整個工作流的作業檔案配置中,都可以通過 ${參數名} 的方式引用使用。

(3) Job配置中的參數

  • common參數配置

除了type,command,decpendencies三個參數外,還有如下一些保留參數可以為每個job配置

參數 說明
retries 失敗的job的自動重試的次數
retry.backoff 重試的間隔(毫秒)
working.dir 覆寫預設配置的執行job的目錄
env.property 設定環境變量
failure.emails job失敗時發送的郵箱,用逗号隔開
success.emails job成功時發送的郵箱,用逗号隔開
notify.emails job成功或失敗都發送的郵箱,用逗号隔開

一個flow的email屬性,隻會取最後一個job的配置,其他的job的email配置将會被忽略。

使用者也可以自用一下參數,用于接收外部或者上遊job的參數,也可用于傳遞給shell腳本等。

  • Runtime 屬性

這些屬性在job運作期間自動被添加.

參數 說明
azkaban.job.attempt job重試次數,從0開始增加
azkaban.job.id 運作的job name
azkaban.flow.flowid 運作的job的flow name
azkaban.flow.execid flow的執行id
azkaban.flow.projectid 工程id
azkaban.flow.projectversion project上傳的版本
azkaban.flow.uuid flow uuid
azkaban.flow.start.timestamp flow start的時間戳
azkaban.flow.start.year flow start的年份
azkaban.flow.start.month flow start 的月份
azkaban.flow.start.day flow start 的天
azkaban.flow.start.hour flow start的小時
azkaban.flow.start.minute start 分鐘
azkaban.flow.start.second start 秒
azkaban.flow.start.millseconds start的毫秒
azkaban.flow.start.timezone start 的時區
  • 參數繼承

字尾為.properties的檔案将會作為參數檔案加載,并且為flow中每個job所共享,屬性檔案通過目錄分層結構繼承。

比如,在zip包中有以下結構

system.properties baz.job myflow/ myflow.properties myflow2.properties foo.job bar.job

system.properties是全局的屬性,将會被baz.job和myflow目錄下的foo.job和bar.job使用,但是baz.job不會繼承myflow.properties和myflow2.properties的屬性,因為是它的下層.

  • 參數替換

azkaban支援參數替換;替換參數樣式: azkaban會替換{}中的參數。無論${parameterName} 在job file中或者在參數檔案中或者運作時參數發現,都可以被替換為對應的值。

# shared.properties replaceparameter=bar

# myjob.job param1=mytest foo=${replaceparameter} #${replaceparameter}會替換為bar param2=${param1} # ${param1} 會被替換成mytest。

前面這個例子,在myjob 作業運作前,foo 會被指派為bar , param2會被指派為mytest.

參數名不能有空格,标點符号等。

  • Parameter Passing:參數傳遞

azkaban以job執行過程中,傳遞進來的臨時參數,運作時參數,項目中配置檔案的參數,job定義中參數等 都儲存在 ${JOB_PROP_FILE}檔案中,儲存格式為key=value。執行job的中shell指令時,可以作為參數傳遞。

JOB_PROP_FILE 是一個環境變量參數。

  • Parameter Output:參數輸出

一個任務運作結束,可以将一些參數寫入到${JOB_OUTPUT_PROP_FILE}檔案 中,azkaban會将這些參數傳遞到下遊依賴的的job的參數檔案${JOB_PROP_FILE}檔案中,供下遊job引用。

寫如到${JOB_OUTPUT_PROP_FILE}檔案中參數需要是json格式的,否則會報json解析錯。

JOB_OUTPUT_PROP_FILE也是一個環境變量參數。

(4) shell類型的job的參數傳遞

azkaban中的shell 作業,如何接收從webUI傳遞的參數?

step1: UI頁面輸入參數定義:

ui_starttime=2018-07-01

step2:在job檔案myjob.job指定:

##作業定義檔案UI輸入參數接收: job_param4=${ui_starttime} ##作業定義檔案腳本指令行引用UI輸入參數: sh test_azkaban_job.sh "${job_param4}"

step3:shell test_azkaban_job.sh 的内容

vi test_azkaban_job.sh

echo "inputparamter:$1" #接收job檔案中傳遞的參數。

問題:

在頁面手動執行前面的job時,如果UI參數ui_test在job執行沒有輸入,會執行失敗。異常資訊如下:

hello ERROR - Failed to build job executor for job helloCould not find variable substitution for variable(s) [param4->ui_starttime ]

在定時排程任務指定時,需要指定工作流參數flowParameters :ui_starttime,避免該錯誤。

其他:

運作時參數:在UI頁面重新輸入運作時參數時,可以覆寫系統預設生成的參數值。

運作時參數,和UI輸入的參數,都可以認為是全局參數,在整個工作流的作業

配置中,都可以通過 ${參數名} 的方式引用使用。

在shell 中直接引用 公共參數,運作時系統參數,UI輸入參數,是無效的。

在shell中隻能直接使用環境變量;公共參數,運作時系統參數,UI輸入參數能隻通過shell的腳本參數的方式傳遞進來。

job檔案中定義的環境變量參數,可以在shell腳本中直接引用,但隻對目前job有效。

參考:http://www.mamicode.com/info-detail-2106795.html

          https://www.cnblogs.com/honeybee/p/7921626.html