azkaban概述
1、azkaban是什么?
azkaban是任务调度的工具
2、azkaban使用步骤
1、需要创建两个文件[.project文件和.flow文件]
2、在.project文件中添加一行内容: azkaban-flow-version: 2.0
.flow文件中配置job任务
3、将两个文件打成.zip包
4、上传azkaban web页面
azkaban在两个文件中都是使用的yaml的语法
yaml语法规范:
1、大小写敏感
2、通过缩进表示层次关系
3、缩进只能空格,不能用tab
4、属性名与属性值之间通过 :空格
3、hello word
nodes:
- name: A[任务名]
type: command[任务类型[command、flow、javaprocess]]
config:
command: echo “hello word” [command执行的命令]
4、作业依赖
通过dependsOn配置job的依赖关系
nodes:
- name: A
type: command
config:
command: echo “JOB A”
- name: B
type: command
config:
command: echo “JOB B”
dependsOn:
- A[依赖的任务名]
-
5、内嵌工作流
azkaban可以配置job为内嵌流
通过type: flow配置任务为内嵌流
nodes:
- name: A
type: flow[配置任务A为内嵌流,流中有A1、A2两个任务]
nodes:
- name: A1
type: command
config:
command: echo “JOB A1”
- name: A2
type: command
config:
command: echo “JOB A2”
6、自动重试
在config属性中通过retries配置重试次数,通过retry.backoff配置重试的时间间隔
nodes:
- name: A
type: command
config:
command: sh not_exists.sh
retries: 3 [重试次数]
retry.backoff: 5000[重试时间间隔,单位是毫秒]
7、公共的配置
公共的配置是写在.flow文件的开头
config:
retries: 3
retry.backoff: 5000
nodes:
- name: A
type: command
config:
command: echo “JOB A”
- name: B
type: command
config:
command: echo “JOB B”
dependsOn:
- A[依赖的任务名]
上述任务A与任务B就拥有了retries、retry.backoff两个属性
8、运行java程序
通过type: javaprocess配置任务是运行java程序
通过java.class指定运行哪个类[类中必须要有main方法]
通过Xmx、Xms配置程序运行时的内存大小
Xmx、Xms在配置的时候一般配置的一样,减少内存的抖动带来的GC的性能影响
nodes:
- name: A
type: javaprocess
config:
java.class: javaclass的全类名
Xmx: 1024m
Xms: 1024m
9、条件工作流
通过condition属性配置该任务执行的前提条件
条件工作流可以分为两类:
1、job运行脚本,在脚本中将参数名与对应的参数值以json字符串的方式添加到azkaban内置变量[$JOB_OUTPUT_PROP_FILE]中
后续要想取出变量对应的值,通过 ${任务名:参数名}
nodes:
- name: A
type: command
config:
command: sh a.sh
- name: B
type: command
config:
command: echo “JOB B”
dependsOn:
- A
condition: ${A:name} == “zhangsan” && ${A:age} == 20
a.sh的脚本内容
echo ‘{“name”:“zhangsan”,“age”:20}’ >> $JOB_OUTPUT_PROP_FILE
2、通过azkaban内部宏来进行判断任务是否满足执行条件
azkaban内部宏:
all_success: 只有依赖的任务全部执行成功才会执行本任务
all_done: 只有依赖的任务全部完成[success、failed、killed]才会执行本任务
all_failed: 只有依赖的任务全部执行失败才会执行本任务
one_failed: 依赖的任务至少有一个失败才会执行本任务
one_success: 依赖的任务至少有一个成功才会执行本任务
nodes:
- name: A
type: command
config:
command: echo “JOB A”
- name: B
type: command
config:
command: echo “JOB B”
- name: C
type: command
config:
command: echo “JOB C”
dependsOn:
- A
- B
condition: all_success