美文网首页
009.Azkaban-3.x Conditional Work

009.Azkaban-3.x Conditional Work

作者: CoderJed | 来源:发表于2019-09-30 12:59 被阅读0次

    1. What is Azkaban Conditional Workflow?

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

    2. How to define a condition?

    依据其他Job的输出的参数

    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的值:

    #!/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

    示例:

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

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

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

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

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

    以下是一个完整的示例:

    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

    相关文章

      网友评论

          本文标题:009.Azkaban-3.x Conditional Work

          本文链接:https://www.haomeiwen.com/subject/nkwcpctx.html