Azkaban条件工作流介绍

263 阅读2分钟

一、概述

条件工作流功能允许用户自定义执行条件来决定是否运行某些Job。条件可以由当前Job的父 Job 输出的运行时参数构成,也可以使用预定义宏。在这些条件下,用户可以在确定 Job执行逻辑时获得更大的灵活性,例如,只要父 Job 之一成功,就可以运行当前 Job。

二、运行时参数案例

2.1 基本原理

(1)父 Job 将参数写入JOB_OUTPUT_PROP_FILE环境变量所指向的文件;

(2)子 Job 使用 ${jobName:param}来获取父 Job 输出的参数并定义执行条件

2.2 支持的条件运算符

符号说明
==等于
!=不等于
>大于
>=大于等于
<小于
<=小于等于
&&
双竖杠
!

2.3 案例

需求:

  • JobA 执行一个 shell 脚本。
  • JobB 执行一个 shell 脚本,但 JobB 不需要每天都执行,而只需要每周一执行。

(1)新建JobA.sh脚本文件

#!/bin/bash
echo "do JobA"
wk=`date +%w`
echo "{\"wk\":$wk}" > $JOB_OUTPUT_PROP_FILE

(2)新建JobB.sh脚本文件

#!/bin/bash
echo "do JobB"

(3)新建 condition.flow文件

nodes:
  - name: JobA
    type: command
    config:
      command: sh JobA.sh

  - name: JobB
    type: command
    dependsOn:
      - JobA
    config:
      command: sh JobB.sh
    condition: ${JobA:wk} == 1

注意:最后的condition是和config在同一个层级。

(4)新建first.project文件

azkaban-flow-version: 2.0

(5)将JobA.sh、JobB.sh、condition.flow、first.project文件统一进行压缩到ZIP包中

07.Azkaban条件工作流介绍01.jpg

(6)在Azkaban WEB界面执行作业,查看执行结果

07.Azkaban条件工作流介绍02.jpg

  • 按照我们设定的条件,JobB 会根据当日日期决定是否执行。

三、预定义宏案例

3.1 概念

Azkaban 中预置了几个特殊的判断条件,称为预定义宏。

预定义宏会根据所有父 Job 的完成情况进行判断,再决定是否执行。

可用的预定义宏如下:

参数说明
all_success表示父 Job 全部成功才执行(默认)
all_done表示父 Job 全部完成才执行
all_failed表示父 Job 全部失败才执行
one_success表示父 Job 至少一个成功才执行
one_failed表示父 Job 至少一个失败才执行

3.2 案例

需求:

  • JobA 执行一个 shell 脚本
  • JobB 执行一个 shell 脚本
  • JobC 执行一个 shell 脚本,要求 JobA、JobB 中有一个成功即可执行

(1)新建 JobA.sh

#!/bin/bash
echo "do JobA"

(2)新建 JobC.sh

#!/bin/bash
echo "do JobC"

(3)新建macro.flow

nodes:
  - name: JobA
    type: command
    config:
      command: sh JobA.sh

  - name: JobB
    type: command
    config:
      command: sh JobB.sh

  - name: JobC
    type: command
    dependsOn:
      - JobA
      - JobB
    config:
      command: sh JobC.sh
    condition: one_success

(4)将JobA.sh、JobC.sh、macro.flow、first.project 文件,打包成 macro.zip

07.Azkaban条件工作流介绍03.jpg

(5)创建 macro 项目-->上传 macro.zip 文件-->执行作业-->观察结果

07.Azkaban条件工作流介绍04.jpg