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.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
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值