前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Azkaban-3.x Conditional Workflow

Azkaban-3.x Conditional Workflow

作者头像
CoderJed
发布2019-09-30 16:53:55
9670
发布2019-09-30 16:53:55
举报
文章被收录于专栏:Jed的技术阶梯Jed的技术阶梯

1. What is Azkaban Conditional Workflow?

Conditional Workflow的作用是,用户可以指定一些条件来运行Job,比如可以根据上一个Job的输出结果来判断是否运行下一个Job,或者用户可以把Flow中的各个Job做成分支结构,Conditional Workflow功能使得用户在配置Flow的时候有了更大的灵活性。

2. How to define a condition?

依据其他Job的输出的参数

代码语言:javascript
复制
nodes:
 - name: JobA
   type: command
   config:
     command: sh jobA.sh

 - name: JobB
   type: command
   dependsOn:
     - JobA
   config:
     command: echo "This is JobB."
   condition: ${JobA:param1} == 1

这里只有当JobA输出的参数param1=1时,JobB才会执行,在JobA的最后应该输出这个param1的值到$JOB_OUTPUT_PROP_FILE文件中,这个文件具体是什么用户不用关心,JobB会去这个文件中读取JobA设置的param1参数的值。例如,在上面的例子中,在jobA.sh的末尾应该输出param1的值:

代码语言:javascript
复制
#!/bin/bash

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

参数值的比较支持这些运算符:==, !=, >, >=, <, <=

依据其他Job的执行状态

Azkaban支持如下语义:

  • all_success (default):依赖的Job全部执行成功后,执行当前Job
  • all_done:依赖的Job全部执行完成后,执行当前Job
  • all_failed:依赖的Job全部执行失败后,执行当前Job
  • one_success:依赖的Job只要有一个执行成功后,执行当前Job
  • one_failed :依赖的Job只要有一个执行失败后,执行当前Job

需要根据Job的状态来判断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

示例:

代码语言:javascript
复制
- name: JobD
   type: command
   dependsOn:
     - JobB
     - JobC
   config:
     command: pwd
   condition: one_success

只要JobB或者JobC有一个任务执行成功,就执行JobD

依据其他Job输出参数和执行状态的各种组合

使用&&, ||, !可以构造出多种多样的条件判断组合,例如

代码语言:javascript
复制
${JobA:param1} == 1 && ${JobB:param2} > 5
one_success
all_done && ${JobC:param3} != "foo"
(!{JobD:param4} || !{JobE:parm5}) && all_success || ${JobF:parm6} == "bar"

以下是一个完整的示例:

代码语言:javascript
复制
nodes:
 - name: JobA
   type: command
   config:
     command: bash ./write_to_props.sh

 - name: JobB
   type: command
   dependsOn:
     - JobA
   config:
     command: echo “This is JobB.”
   condition: ${JobA:param1} == 1

 - name: JobC
   type: command
   dependsOn:
     - JobA
   config:
     command: echo “This is JobC.”
   condition: ${JobA:param1} == 2

 - name: JobD
   type: command
   dependsOn:
     - JobB
     - JobC
   config:
     command: pwd
   condition: one_success

可以在页面上查看这个Flow中各个Job之间的依赖关系:

image

image

image

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.09.30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. What is Azkaban Conditional Workflow?
  • 2. How to define a condition?
    • 依据其他Job的输出的参数
      • 依据其他Job的执行状态
        • 依据其他Job输出参数和执行状态的各种组合
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档