本文上接《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#