您的位置:首页 > 其它

azkaban 创建工作流

2017-04-08 16:54 567 查看
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.emailsjob失败时发送的邮箱,用逗号隔开
success.emailsjob成功时发送的邮箱,用逗号隔开
notify.emailsjob成功或失败都发送的邮箱,用逗号隔开
一个flow的email属性,只会取最后一个job的配置,其他的job的email配置将会被忽略

Runtime 属性

这些属性在job运行期间自动被增加

参数说明
azkaban.job.attemptjob重试次数,从0开始增加
azkaban.flow.flowid运行的job的flow name
azkaban.flow.execidflow的执行id
azkaban.flow.projectid工程id
azkaban.flow.projectversionproject上传的版本
azkaban.flow.uuidflow uuid
azkaban.flow.start.timestampflow start的时间戳
azkaban.flow.start.yearflow start的年份
azkaban.flow.start.monthflow start 的月份
azkaban.flow.start.dayflow start 的天
azkaban.flow.start.hourflow start的小时
azkaban.flow.start.minutestart 分钟
azkaban.flow.start.secondstart 秒
azkaban.flow.start.millsecondsstart的毫秒
azkaban.flow.start.timezonestart 的时区

参数设置

参数继承

后戳名为.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.argsJVM 参数,整个字符串会传递给JVM,eg:-Dmyprop=test -Dhello=world
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐