Azkaban中的参数详解
参数传递是调度字体工作流运行时非常重要的一部分,工作流的执行,单个作业的执行,多个工作流之间的依赖执行,历史任务重算,都涉及到参数传递和同步。
azkaban的工作流中的参数可以分为如下几个类型:
1: Azkaban UI 页面输入参数
2: 环境变量参数
3:job作业文件中定义的参数
4:工作流的用户定义的属性文件,上游作业传递给下游的参数
5:工作流运行时产生的系统参数
6:job的common参数
以下是参数类型与其对应的参数范围:
参数类型 | 参数的作用域 |
---|---|
UI 页面输入参数 ,即工作流参数 | flow全局有效 |
工作流ZIP压缩包中的属性文件 | flow全局有效,zip文件目录以及子目录有效 |
工作流运行时参数 | flow全局有效 |
环境变量参数 | flow全局有效 |
job的common参数 | job内局部有效 |
JOB文件中定义的参数 | job内局部有效 |
上游作业传递给下游的参数 | job内局部有效 |
其中,全局参数,在整个工作流的作业文件配置中,都可以通过 ${参数名} 的方式引用使用。
job配置中的参数
commod参数配置
除了typem,commond,decpendencies三个参数外,还有如下一些保留参数可以为每个job配置
参数 | 说明 |
retries | 失败的job的自动重试的次数 |
retry.backoff | 重试的间隔(毫秒) |
working.dir | 指定命令被调用的目录。默认的working目录是executions/${execution_ID}目录 |
env.property | 指定在命令执行前需设置的环境变量。Property定义环境变量的名称, 因此 env.VAR_NAME=VALUE就创建了一个$VAR_NAME环境变量 并且指定了它的VALUE |
failure.emails | job失败时发送的邮箱,用逗号隔开 |
success.emails | job成功时发送的邮箱,用逗号隔开 |
notify.emails | job成功或失败都发送的邮箱,用逗号隔开 |
一个flow的email属性,只会取最后一个job的配置,其他的job的email配置将会被忽略。
单个job的创建
创建job很简单,只要创建一个以.job结尾的文本文件就行了,例如我们创建一个工作,用来打印hello world,名字叫做command.job
#command.job
type=command
command=echo 'hello world'
一个简单的job就创建好了,解释下,type的command,告诉azkaban用unix原生命令去运行,比如原生命令或者shell脚本,当然也有其他类型。
一个工程不可能只有一个job,我们现在创建多个依赖job,这也是采用azkaban的首要目的。
多个command类型多job工作流flow
jobs和它们的依赖组成flow。怎么创建依赖,只要指定dependencies参数就行了。比如导入hive前,需要进行数据清洗,数据清洗前需要上传,上传之前需要从ftp获取日志。
比如定义5个job:
1:o2o_2_hive.job:将清洗完的数据入hive库
2:o2o_clean_data.job:调用mr清洗hdfs数据
3:o2o_up_2_hdfs.job:将文件上传至hdfs
4:o2o_get_file_ftp1.job:从ftp1获取日志
5:o2o_get_file_fip2.job:从ftp2获取日志
彼此之间依赖关系:
3依赖4和5,2依赖3,1依赖2,4和5没有依赖关系。
o2o_2_hive.job:
type=command
# 执行sh脚本,建议这样做,后期只需维护脚本就行了,azkaban定义工作流程
command=sh /job/o2o_2_hive.sh
dependencies=o2o_clean_data
o2o_clean_data.job:
type=command
# 执行sh脚本,建议这样做,后期只需维护脚本就行了,azkaban定义工作流程
command=sh /job/o2o_clean_data.sh
dependencies=o2o_up_2_hdfs
o2o_up_2_hdfs.job:
type=command
#需要配置好hadoop命令,建议编写到shell中,可以后期维护
command=hadoop fs -put /data/*
#多个依赖用逗号隔开
dependencies=o2o_get_file_ftp1,o2o_get_file_ftp2
o2o_get_file_ftp1.job:
type=command
command=wget "ftp://file1" -O /data/file1
o2o_get_file_ftp2.job:
type=command
command=wget "ftp:file2" -O /data/file2