- YAML 语言
- 基础案例
- Hello World 案例
- 作业依赖案例
- 手动失败重试案例
YAML 语言
基本语法
大小写敏感。
使用缩进表示层级关系,但是只能使用空格来缩进。
支持的数据结构
对象:键值对的集合
数组:一组按次序排列的值
纯量:单个的、不可再分的值
对象
name: namename
数组
- name: zhangsan
- name: wangwu
age: 15
# 有一个数组两个元素,[{name: zhangsan},{name: wangwu,age: 15}]
纯量
wangwu
Hello World 案例
编写规划文件
azkaban.project
指定规划文件使用的版本
azkaban-flow-version: 2.0
该文件的内容是确定的,冒号后紧跟两个空格。
*.flow
描述工作流程文件,是一个yaml格式的文件
nodes:
- name: job_name
type: command
config:
command: echo "Hello World"
该文件的解析规则是先找到每个节点处理的任务流程,每个任务流程是一个数组,将数组的每一个元素取出生成单独的一个任务
将两个文件打成一个压缩包,包名不含中文字符
创建任务及运行任务
在web页面中创建一个任务,填写任务名和描述。
将压缩包上传至azkaban
解析完成后,执行任务
等待任务列表反馈任务执行成功
在其log中可以看到echo
作业依赖案例
编写一个.flow文件
nodes:
- name: jobA
type: command
config:
command: echo "A"
- name: jobB
type: command
config:
command: echo "B"
- name: jobC
type: command
dependsOn:
- jobA
- jobB
config:
command: echo "C"
dependsOn: 作业依赖,即当前作业需要哪些或哪个作业完成后才能执行
将flow文件和project文件打包后上传至azkaban,并执行任务,在任务的日志中可以看到,先执行了A和B,再执行C
自动失败重试案例
失败后系统会按照设定的重试次数和重试时间间隔自动重试
nodes:
- name: jobA
type: command
config:
command: sh /not_exists.sh
retries: 3
retry.backoff: 3000
retries: 失败后最多还会尝试的次数
retry.backoff: 间隔多少ms尝试一次
手动失败重试案例
在任务失败后,可以手动从失败位置,或之前的某个位置重新执行后续作业。
nodes:
- name: jobA
type: command
config:
command: echo "A"
- name: jobB
type: command
dependsOn:
- jobA
config:
command: echo "B"
- name: jobc
type: command
dependsOn:
- jobB
config:
command: echo "C"
- name: jobD
type: command
dependsOn:
- jobc
config:
command: echo "D"
- name: jobE
type: command
dependsOn:
- jobD
config:
command: echo "E"
- name: jobF
type: command
dependsOn:
- jobE
config:
command: echo "F"
当执行失败后,有两种手动重试方法。
方法一:
在History页面找到失败的项目,点击Flow
在流程页面,点击Prepare Execution,可以看到执行成功的作业是灰色的,这是直接执行即可
方法二:
在project页面找到失败的项目,并进入该项目
点击Execute Flow,在流程页面中,对执行完成的作业点击右键,将其标注为disable,标注后将不再执行该作业