Azkaban条件工作流,通过配置.flow中的condition条件来实现job控制。
需求:
- JobA 执行一个shell脚本,每日执行
- JobB 执行一个shell脚本,每月1号执行
1.JobA.sh
#!/bin/bash
echo "do JobA"
day=`date +%d`
# 判断当前日期是否为1号
if [ "$day" -eq "01" ]; then
wk=1
echo "dflag:$dflag, run"
else
wk=2
echo "dflag:$dflag, skip"
# 传递参数wk至 $JOB_OUTPUT_PROP_FILE
echo "{\"dflag\":$dflag}" > $JOB_OUTPUT_PROP_FILE
PS:参数dflag=1,可以进行传递,而dflag=01,传递的参数会无法识别,暂未分析出原因,因此做了个标签进行传递
报错信息:
2.JobB.sh
#!/bin/bash
echo "do JobB"
3.Job.flow
nodes:
- name: JobA
type: command
config:
command: sh JobA.sh
- name: JobB
type: command
dependsOn:
- JobA
config:
command: sh JobB.sh
condition: ${JobA:dflag} == 1
4.Job.project
azkaban-flow-version: 2.0
5.将上述四个脚本压缩至zip
6.上传至azkaban
7.配置Schedule
此处配置为了每天9点定时调度
8.手动执行脚本
(1)条件不成立(非1号)
在Flow Log会提示condition不满足条件,所以JobB不执行,且Flow会是KILLED状态
(2)条件成立(1号)
满足条件,JobB执行,且Flow状态为SUCCEEDED