azkaban 创建工作流

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=flowflow.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

你可能感兴趣的:(azkaban)