azkaban動態傳入作業參數參考手冊

  • 快速上手-shell類型job參數傳遞

2. shell類型的job的參數傳遞

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

step1: UI頁面輸入參數定義:
ui_test=test111111111

step2:在job文件myjob.job指定:

  1. ##作業定義文件UI輸入參數接收:

  2. job_param4=${ui_test}

  3.  
  4. ##作業定義文件腳本命令行引用UI輸入參數:

  5. 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_test ]

在定時調度任務指定時,需要指定工作流參數flowParameters :ui_test,避免該錯誤。

運行時參數:在UI頁面重新輸入運行時參數時,可以覆蓋系統默認生成的參數值。

運行時參數,和UI輸入的參數,都可以認爲是全局參數,在整個工作流的作業
配置中,都可以通過 ${參數名} 的方式引用使用。

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

job文件中定義的環境變量參數,可以在shell腳本中直接引用,但只對當前job有效。

 

 

  • 參數傳遞詳解

(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有效。

發佈了40 篇原創文章 · 獲贊 3 · 訪問量 4719
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章