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完成时退出代码为零则代表执行成功,若非零则失败。
azkaban web动态传参,command job可以通过${变量名}获取该参数。
ii. javaprocess jobs
Java process jobs 是一个方便启动java程序的容器。它等价于从命令行执行一个class的main方法。下面介绍在javaprocess jobs中的可用属性:
env.property可以通过程序获取环境变量获得。
iii. pig jobs
这个job类型会通过Grunt运行pig脚本。下面介绍pig jobs的可用属性:
iv. java jobs
Java jobs是一个带有run()方法的java类,例如。Java class不必要实现任何接口。Azkaban会充分利用在下面class中定义的方法:
在使用日志的时候log4j需要为job名称设置一个logger name。
Azkaban提供了一个可以为适当的job日志发出消息的log4j appender。
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下面定义参数进行设置:
c) Job 目录布局
Job 文件是以 .job 结尾的文件。可以再 .properties 文件中添加额外属性。 一个属性可以引用其它属性,例如:
一个常见的需求就是要支持在许多环节当中部署单独一个job并且这些环境都需要一些不同的特殊配置。为了支持这一点,Azkaban将job的所有配置分层设置。一个job可以继承定义在它所部署环境顶级目录的任意属性。为了避免在job添加一些与环境相关的属性(如:主机名或端口号),这里要设置一个定义在全局属性文件中的例如${some.url}的变量。这个全局属性文件可以放置在job需要运行的环境中,不需要随着job重新部署。
d) 其它标准Job属性
许多属性都是通过框架提供给各种类型的job。
下面是一些可以被添加给任意job的属性说明:
e) Azkaban系统属性