本文上接《Azkaban Flow 2.0 使用簡介》,對Azkaban Condition Flow (條件工作流) 做簡單介紹
目錄
條件工作流 介紹
作用
條件工作流,允許用戶根據條件指定是否運行某些作業
使用方式
- 用戶可以根據運行時參數(如先前作業的輸出)運行或禁用某些作業
- Azkaban提供了一些預定義的宏,用戶可以直接使用,用於比較父作業的運行狀態來運行或禁用某些作業
支持的運算符
運算符 | 含義 |
---|---|
== | 等於 |
!= | 不等於 |
> | 大於 |
>= | 大於等於 |
< | 小於 |
<= | 小於等於 |
&& | 與 |
|| | 或 |
! | 非 |
作業運行時參數的條件:
- 使用 ${jobName:param} 來定義作業運行時參數的條件
- “:” 用於分隔jobName和參數
- job運行時,使用參數與條件中的字符串或數字進行比較
- 用戶需要事先將參數的值寫入 $JOB_OUTPUT_PROP_FILE
支持的預定義宏
預定義宏 | 含義 |
---|---|
all_success | 默認值,所有父job全部成功 |
all_done | 所有父job全部完成 |
all_failed | 所有父job全部失敗 |
one_success | 至少有一個父job成功 |
one_failed | 至少有一個父job失敗 |
每個預定義宏的相應作業狀態:
預定義宏 | 作業狀態 |
---|---|
all_done | FAILED, KILLED, SUCCEEDED, SKIPPED, FAILED_SUCCEEDED, CANCELLED |
all_success / one_success | SUCCEEDED, SKIPPED, FAILED_SUCCEEDED |
all_failed / one_failed | FAILED, KILLED, CANCELLED |
一些有效的條件 舉例
${JobA:param1} == 1 && ${JobB:param2} > 5
one_success
all_done && ${JobC:param3} != "foo"
(!{JobD:param4} || !{JobE:parm5}) && all_success || ${JobF:parm6} == "bar"
條件工作流 實例
- 新建兩個文件:flow20.project 和 .flow 為擴展名的文件
- 打包zip & 上傳zip & 運行
詳細過程略(可參見上一篇博文中的“簡單的Flow”一節),.flow 文件舉例:
# 文件名:condition_2flow.flow
nodes:
- name: JobA
type: command
config:
command: sh /azkaban/job/write_to_props.sh
- name: JobB
type: command
dependsOn:
- JobA
config:
command: echo "This is JobB."
condition: ${JobA:param1} == "AAA"
- name: JobC
type: command
dependsOn:
- JobA
config:
command: echo "This is JobC."
condition: ${JobA:param1} == "BBB"
- name: JobD
type: command
dependsOn:
- JobB
- JobC
config:
command: echo "This is JobD."
condition: one_success
/azkaban/job/write_to_props.sh 文件的內容:
echo '{"param1":"1"}' > $JOB_OUTPUT_PROP_FILE
Condition Flow在web頁面中的顯示是如下圖的樣子

- 實例中“JobC”的condition不成立,所以不會執行
- “JobD”的condition是只要“JobB”和“JobC”有一個成功即可執行
所有上述實例最終的執行結果為:“JobC”不執行,其他均執行成功。如下圖:

附錄
官方文檔
https://azkaban.readthedocs.io/en/latest/conditionalFlow.html#