azkban的特点就是可以创建工作流,每个工作流可以包含多个job,这些job之间可以有多种依赖关系,azkaban可以根据他们的依赖关系进行任务调度
创建工作流
创建job
每个job以文件形式存在,后缀名为.job
#first job
type=command #job的类型,这里是命令类型
command=echo "Hello World" #这个job执行linux命令,输出Hello World
输出的Hello world将会在azaban的job details的log中看到
创建工作流
一个工作包含若干个job,job之间可以指定依赖冠以,用属性denpendencies
指定
#first job
type=command
command= echo "first"
#second job
type=command
denpendencies=first #依赖job first
command=echo "second"
#third job
type=command
denpendencies=first,second #依赖两个job,job之间用逗号隔开
command=echo "third job"
flow的命名:默认会根据没有被依赖的job 的name作为flow的名称,上面的三个job中,third job再没有被依赖,所以flow的名称就是third
嵌入工作流
一个flow中可以嵌入另外的flow
创建一个.job文件,设置type=flow
和flow.name
type=flow
flow.name=third #这个job嵌入了上面的third flow
上传job
在azkaban页面上传job,必须要把job打包成zip包
Job配置
common配置
除了type,command,decpendencies三个参数外,还有一些保留参数可以为每个job配置
参数 | 说明 |
---|---|
retries | 失败的job的自动重试的次数 |
retry.backoff | 重试的间隔(毫秒) |
working.dir | 覆盖默认配置的执行job的目录 |
env.property | 设置环境变量 |
failure.emails | job失败时发送的邮箱,用逗号隔开 |
success.emails | job成功时发送的邮箱,用逗号隔开 |
notify.emails | job成功或失败都发送的邮箱,用逗号隔开 |
一个flow的email属性,只会取最后一个job的配置,其他的job的email配置将会被忽略
Runtime 属性
这些属性在job运行期间自动被增加
参数 | 说明 |
---|---|
azkaban.job.attempt | job重试次数,从0开始增加 |
azkaban.flow.flowid | 运行的job的flow name |
azkaban.flow.execid | flow的执行id |
azkaban.flow.projectid | 工程id |
azkaban.flow.projectversion | project上传的版本 |
azkaban.flow.uuid | flow uuid |
azkaban.flow.start.timestamp | flow start的时间戳 |
azkaban.flow.start.year | flow start的年份 |
azkaban.flow.start.month | flow start 的月份 |
azkaban.flow.start.day | flow start 的天 |
azkaban.flow.start.hour | flow start的小时 |
azkaban.flow.start.minute | start 分钟 |
azkaban.flow.start.second | start 秒 |
azkaban.flow.start.millseconds | start的毫秒 |
azkaban.flow.start.timezone | start 的时区 |
参数设置
参数继承
后戳名为.properties的文件将会作为参数文件加载,并且并flow中每个job共享,属性文件通过目录的分层结构继承
比如,在zip包中有以下结构
system.properties
baz.job
myflow/
myflow.properties
myflow2.properties
foo.job
bar.job
system.properties是全局的属性,将会被baz.job和myflow目录下的foo.job和bar.job使用,但是baz.job不会继承myflow.properties和myflow2.properties的属性,因为是它的下层
参数替换
替换参数样式: parameterazkaban会替换 {}中的参数
#system.properties
program=spark
#myjob.job
param1=test
param2=${program} #${program}会替换为spark
参数传递
参数传递方式依赖于jobtype,通常azkaban会将参数写到临时文件,job可以读取这些文件,文件的路径通过JOB_PROP_FILE
环境变量设置,参数格式是键值对。java type会将属性传到一个构造方法里面。所以只需要把传递的参数写到文件里面就可以了
参数输出
参数输出通过环境变量JOB_OUTPUT_PROP_FILE
设置,如果一个job将文件写入这个路径,那么下一个job会读取上一个job输出的参数
内置的job 类型
command
参数 | 说明 |
---|---|
command | 要执行的命令,eg:ls -all |
Java Process
参数 | 说明 |
---|---|
java.class | 包含main方法的java类,eg:azkaban.example.Hello |
classpath | 类路径,用逗号隔开,如果没有设置此参数,那么会默认加载当前目录的所有jar包 |
Xms | 内存初始的大小,默认64M |
Xmx | 内存初始的最大空间,默认256M |
main.args | 传递给main方法的参数,用逗号隔开 |
jvm.args | JVM 参数,整个字符串会传递给JVM,eg:-Dmyprop=test -Dhello=world |