azkanban
azkaban的使用场景
用于任务的调度
azkaban的使用
1.创建 .project文件:azkaban-flow-version:2.0
2.创建 .flow文件
3.压缩成 .zip文件,上传
.flow文件是yaml格式
1.大小写敏感
2.通过缩进来表达层次,严禁使用 \t
3.属性名:后面跟一个空格
案例
#1.hello world
nodes:
- name: job名称
type: command<job类型[command/javaprocess/flow]>
config:
command: echo "..."/sh xx.sh
#2.作业依赖[dependsOn配置作业的依赖关系]
nodes:
- name: A
type: command
config:
command: echo "A"
- name: B
type: command
config:
command: echo "B"
dependsOn:
- A
#3.内嵌工作流
nodes:
- name: A
type: flow #flow代表当前Job就是一个工作流
#config
# command:echo "A" 当前不会打印,因为只有type为command才会执行命令
nodes:
- name: B
type: command
config:
command: echo "A.B"
全局配置
[ 开头通过config进行配置,后续可以通过${属性名}来引用 ]
config:
属性名1:属性值
属性名2:属性值
nodes:
- name: A
type: command
config:
command: echo "${属性名1} .."
自动重试
[ retries代表重试的次数,retry.backoff代表重试的时间间隔 ]
nodes:
- name: A
type: command
config:
command: echo "${属性名1} .."
retries: 3
retry.backoff: 5000 #毫秒
执行Java程序
type: javaprocess [代表执行Java程序]
java.class :[ 执行哪个Java类,类中必须要有main方法 ]
Xms: [ 代表启动时的内存容量大小 ]
Xmx: [代表执行时的内存的最大容量大小]
一般Xms 要与Xmx设置一致,防止内存的抖动
nodes:
- name: A
type: javaprocess
config:
java.class: com.atguigu.XXX
Xmx: 1024M
Xms: 1024M
条件工作流程
1.根据job的参数进行判断【在脚本中将json字符串写到azkaban内部的变量< J O B O U T P U T P R O P F I L E > 中 , 后 续 通 过 JOB_OUTPUT_PROP_FILE>中,后续通过 JOBOUTPUTPROPFILE>中,后续通过{Job名称:属性名}】再写入$JOB_OUTPUT_PROP_FILE变量的时候,要在脚本的最后一行写入
nodes:
- name: A
type: command
config:
command: sh a.sh
- name: B
type: command
config:
command: echo "B"
condition: ${A:属性名} == "属性值"
#a.sh内容
# #!/bin/bash
# echo '{"属性名":"属性值"}' >> $JOB_OUTPUT_PROP_FILE
azkaban内部宏
all_done:依赖任务全部完成[ kill 、failed 、success …都代表完成 ]
all_success:依赖的任务必须全部failed
all_failed:依赖的任务必须要求其中一个failed
one_success:依赖的任务必须要求其中一个success
nodes:
- name: A
type:command
config:
command: sh a.sh
- name: C
type: command
config:
command: sh c.sh
- name: B
type: command
config:
command: echo "B"
condition: ${A:属性名} == "属性值" && all_success
dependsOn:
- A
- C