Azkaban条件工作流案例

1
2
3
4
5
# 1.运行时参数案例
1) 基本原理
(1)父Job将参数写入JOB_OUTPUT_PROP_FILE环境变量所指向的文件
(2)子Job使用${jobName:param}来获取父Job输出的参数并定义执行条件
2)支持的条件运算符

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 案例需求:
jobA执行一个shell脚本
jobB执行一个shell脚本,但jobBJ不需要每天都执行,而只需要每个周一执行

(1)新建jobA.sh
(2)新建jobB.sh
(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
(4)将JobA.sh、JobB.sh、condition.flow和azkaban.project打包成condition.zip
(5)创建condition项目=>上传condition.zip文件=>执行作业=>观察结果
(6)按照我们设定的条件,JobB会根据当日日期决定是否执行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 预定义宏案例

Azkaban中预置了几个特殊的判断条件,称为预定义宏
预定义宏会根据所有父Job的完成情况进行判断,再决定是否执行。可用的预定义宏如下:

- (1)all_success:表示父Job全部成功才执行(默认)
- (2)all_done: 表示父Job全部完成才执行
- (3)all_failed:表示父Job全部失败才执行
- (4)one_success:表示父Job至少一个成功才执行
- (5)one_failed: 表示父Job至少一个失败才执行

# 案例 需求:
"""
JobA执行一个shell脚本
JobB执行一个shell脚本
JobC执行一个shell脚本
"""
1.新建JobA.sh
2.新建JobC.sh
3.新建marco.flow
nodes:
- name: JobA
type: command
config:
command: sh aaa.sh
- name: JobB
type: command
config:
command: sh jobB.sh
- name: JobC
type: command
dependsOn:
- JobA
- JobB
config:
command: sh bbb.sh
condition: one_success
4.打包上传,可以看到只要一个成功就可以执行jobC