这个文档假定你已经通过quit start部分了解Azkaban的基础的部分
Jobs和配置
Azkaban jobs是主要的代码加上配置的值。配置是按照的格式存储在属性文件当中的。这些job文件可以通过手动编写文本文件创建或者通过用户界面进行创建。许多配置参数都是你的job的自定义配置,但是也有许多可以激活job功能的标准参数。这些参数将会在下面的部分进行描述说明。
a) Job类型
所有的job都需要一个知道那个他们如何去执行的type。一般的,有这样四种job类型:java、command、javaprocess和pig。
Property | Require? | Meaning |
type | required | Job类型:java、command、javaprocess或pig |
每个类型都有多种选项,如下描述。
i. command jobs
命令行jobs本质上是作为单独进程执行的Unix命令。任何输出都要以标准输出或标准错误写入到日志当中。如果一个job完成时退出代码为零则代表执行成功,若非零则失败。
Property | Required? | Meaning | Example |
command | required | 指定要执行的命令 | |
command.n | 可选 | 定义在command执行后顺序执行的额外命令 | |
working.dir | 可选 | 指定命令被调用的目录。默认的working目录是job目录 | |
env.property | 可选 | 指定在命令执行前需设置的环境变量。Property定义环境变量的名称,因此env.VAR_NAME=VALUE就创建了一个$VAR_NAME环境变量并且指定了它的VALUE |
ii. javaprocess jobs
Java process jobs 是一个方便启动java程序的容器。它等价于从命令行执行一个class的main方法。下面介绍在javaprocess jobs中的可用属性:
Property | Required? | Meaning | Example |
java.class | required | 包含main方法的class | |
classpath | 可选 | 一个用逗号隔开的JAR文件的列表并且目录要被添加到classpath下。如果没有设置,它将会把working目录下的所有JAR文件都添加到classpath下面 | |
Xms | 可选 | 启动JVM时初始化内存池大小。默认64M | |
Xmx | 可选 | 内存池最大值。默认为256M | |
main.args | 可选 | 传入到java main方法中的以逗号分隔的参数列表 | |
jvm.args | 可选 | 设置JVM的参数。整个字符串被完整传入作为VM的参数 | |
working.dir | 可选 | 从command jobs继承 | |
env.property | 可选 | 从command jobs继承 |
iii. pig jobs
这个job类型会通过Grunt运行pig脚本。下面介绍pig jobs的可用属性:
Property | Required? | Meaning | Example |
pig.script | 可选 | 指定要运行的pig脚本。如果没有设置,将利用job名称寻找jobname.pig | |
udf.import.list | 可选 | 用逗号分隔的UDF列表 | |
param.name | 可选 | 用于从你的job到pig脚本传递参数的参数替换。顺序不固定。 | |
paramfile | 可选 | 在pig脚本中用于变量替换的以逗号分隔的文件列表。无序,并且param.name优先 | |
hadoop.job.ugi | 可选 | 为Hadoop jobs设置用户名和组 | |
classpath | 可选 | 从javaprocess jobs继承 | |
Xms | 可选 | 从javaprocess jobs继承 | |
Xmx | 可选 | 从javaprocess jobs继承 | |
jvm.args | 可选 | 从javaprocess jobs继承 | |
working.dir | 可选 | 从javaprocess jobs继承 | |
env.property | 可选 | 从javaprocess jobs继承 |
|
iv. java jobs
Java jobs是一个带有run()方法的java类,例如。Java class不必要实现任何接口。Azkaban会充分利用在下面class中定义的方法:
在使用日志的时候log4j需要为job名称设置一个logger name。
Azkaban提供了一个可以为适当的job日志发出消息的log4j appender。
Property | Required? | Meaning | Default |
job.class | required | 要运行的java类 |
|
method.run | 可选 | 用于正在运行job的无参数方法的名称 | |
method.cancel | 可选 | 取消job的无参数方法的名称 | |
method.progress | 可选 | 用于从job中获取进行的无参数方法的名称 |
b) Job锁
在Azkaban中有三种类型的锁:permit、read.lock和write.lock。
i. Permits
Permit锁是用于限制对一个资源的并发访问。例如:如果你想保证访问特定数据库一次不超过4个job,你可以建立一个有四个permit的池并且每个job需要得到一个permit才可运行。Perimits的数量可以在job目录下的 .property 文件中的属性当中设置。
Permit job的数量必须通过job.permits这个job参数设置提供才可运行。所有的permits会在job结束或失败时立即释放。
ii. Read and Write 锁
Azkaban支持位资源设置Read/Write locks。一个常见的用例就是锁定一个在HDFS中的文件修改的权限。例如:当你有许多job在读一个文件,这时有一个job想重建它,你就要确保在别的job读它的时候你不重建这个文件。读者不会妨碍其他读者并且允许任意数量的读者。无论怎样,都只能允许有一个作者,并且在开始写的时候,所有的读者必须执行完毕。
这些所必须通过read.lock和write.lock下面定义参数进行设置:
Property | Meaning | Example |
job.permits | 用于限制使用特定资源的job的数量 | 3 |
read.lock | 用逗号分隔的资源锁列表。用于在名称为resource上获得read lock。详见前面锁部分。 | /some/resource/name1,/some/resource/name2 |
write.lock | 用逗号分隔的资源锁列表。用于在名称为resource上获得write lock。详见前面锁的部分。 | /some/resource/name1,/name/resource/name2 |
c) Job 目录布局
Job 文件是以 .job 结尾的文件。可以再 .properties 文件中添加额外属性。 一个属性可以引用其它属性,例如:
一个常见的需求就是要支持在许多环节当中部署单独一个job并且这些环境都需要一些不同的特殊配置。为了支持这一点,Azkaban将job的所有配置分层设置。一个job可以继承定义在它所部署环境顶级目录的任意属性。为了避免在job添加一些与环境相关的属性(如:主机名或端口号),这里要设置一个定义在全局属性文件中的例如${some.url}的变量。这个全局属性文件可以放置在job需要运行的环境中,不需要随着job重新部署。
d) 其它标准Job属性
许多属性都是通过框架提供给各种类型的job。
下面是一些可以被添加给任意job的属性说明:
Property | Meaning | Example |
dependencies | 用逗号分隔的job名称的列表。依赖总是会先执行,并且一个job只有当它的依赖job完全执行成功它才会运行 | foo,bar |
notify.emails | 用逗号分隔的email地址列表,用于根据job运行成功还是失败发出通知 | |
retries | 如果job失败了,那么这个属性会命令Azkaban重启job的次数。这个属性是很有必要的。如果你有一个job,由于一些不可控制的因素发生,再次尝试重启很可能是有帮助的 | 3 |
retry.backoff | 当尝试重启时的等待时间(详见retries属性)。Job会在尝试之间等待设置的毫秒数 | 30000 |
e) Azkaban系统属性
Property | Meaning | Example |
mail.host | Mail服务的主机名是通知的发送地址 | localhost |
mail.user | Mail的用户名 | joebob |
mail.password | Mail的密码 | password |
scheduler.threads | 用于运行job的最大线程数 | 50 |
total.job.permits | 系统可分配给job的在job.permits属性设置的permit数量 | 50 |
注: 本文是由本人翻译+原创,如需引用请注明出处:http://blog.csdn.net/zhang__bing/article/details/8715719