本文上接《Azkaban Flow 2.0 使用简介》,对Azkaban Condition Flow (条件工作流) 做简单介绍

条件工作流,允许用户根据条件指定是否运行某些作业

  1. 用户可以根据运行时参数(如先前作业的输出)运行或禁用某些作业
  2. Azkaban提供了一些预定义的宏,用户可以直接使用,用于比较父作业的运行状态来运行或禁用某些作业
运算符 含义
== 等于
!= 不等于
> 大于
>= 大于等于
< 小于
<= 小于等于
&&
||
!

作业运行时参数的条件:

  1. 使用 ${jobName:param} 来定义作业运行时参数的条件
  2. “:” 用于分隔jobName和参数
  3. job运行时,使用参数与条件中的字符串或数字进行比较
  4. 用户需要事先将参数的值写入 $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
  1. ${JobA:param1} == 1 && ${JobB:param2} > 5
  2. one_success
  3. all_done && ${JobC:param3} != "foo"
  4. (!{JobD:param4} || !{JobE:parm5}) && all_success || ${JobF:parm6} == "bar"
  1. 新建两个文件:flow20.project.flow 为扩展名的文件
  2. 打包zip & 上传zip & 运行

详细过程略(可参见上一篇博文中的“简单的Flow”一节),.flow 文件举例:

  1. # 文件名:condition_2flow.flow
  2. nodes:
  3. - name: JobA
  4. type: command
  5. config:
  6. command: sh /azkaban/job/write_to_props.sh
  7. - name: JobB
  8. type: command
  9. dependsOn:
  10. - JobA
  11. config:
  12. command: echo "This is JobB."
  13. condition: ${JobA:param1} == "AAA"
  14. - name: JobC
  15. type: command
  16. dependsOn:
  17. - JobA
  18. config:
  19. command: echo "This is JobC."
  20. condition: ${JobA:param1} == "BBB"
  21. - name: JobD
  22. type: command
  23. dependsOn:
  24. - JobB
  25. - JobC
  26. config:
  27. command: echo "This is JobD."
  28. condition: one_success

/azkaban/job/write_to_props.sh 文件的内容:

  1. echo '{"param1":"1"}' > $JOB_OUTPUT_PROP_FILE

Condition Flow在web页面中的显示是如下图的样子

  1. 实例中“JobC”的condition不成立,所以不会执行
  2. “JobD”的condition是只要“JobB”和“JobC”有一个成功即可执行

所有上述实例最终的执行结果为:“JobC”不执行,其他均执行成功。如下图:

版权声明:本文为remainsu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/remainsu/p/azkaban-condition-flow-tiao-jian-gong-zuo-liu-shi-.html