Azkaban所支持的Job类型及示例
在官方文档的介绍中,了解到Azkaban所支持的工作类型还是很丰富的,如:Command,HadoopShell,Python,Java,Hive,Pig等等。不过在此我们主要具体只来讲解下Python与Java的工作类型任务,其它工作类型的话,比如Commnad,Hive,HadoopShell相对比较简单就不做详解,有需要的话可以自行实践一下。
不管提交哪一种任务,Azkaban默认都是通过上传压缩包来管理,那么在此建议大家养成一个习惯,不要所执行的文件(代码)打包到Azkaban的工程包里面。这样带来的好处是显而易见的,比如:
工程创建的速度快,不需要上传执行部分文件
避免了修改
MySQL中的max_allow_packet参数以解决工程文件上传失败的问题在分布式布署环境中,当执行Task免去了在不同节点中拷贝工程包的麻烦
Java工作任务
由于工作业务场景中,大部分的代码都是Java来编写的,这也正是选择Azkaban的重要原因。与常见的Java程序并无太大的差异,唯一的不同便是程序入口的方法不一样。需要在入口的类中增加个**run**方法,即这方法是启动整体个Task的关键。示例代码如下:
| |
在上面的示例代码中,增加了动态参数设置,最后在打包的时候并不需要指定MainClass的所在,只要项目中的所有相关的代码及依赖打包到一个独立的文件即可。
另外我们还需要构建一个Azkaban工程脚本来告诉它如何执行我们的任务,脚本示例如下:
为了不让任务太单调,顺便个简单的命令输出,组成个FLOW形式输出,参考脚本如下:
效果如下:

Pthon工作任务
Python的工作任务相对就简单了,不过目前没找到动态入参的方法。执行Python工作任务的方法有两种, 参考代码如下:
command类型
python类型
效果如下:

总结
总的来说,Azkaban编写任务的脚本还是简单且灵活的,不过也有比较坑人的地方。比如前面举粟的Java工作任务,在实际的运行过程中是需要添加hadoop的依赖包及相关配置,能过查阅官方文档得知是因为Java任务类型是在HadoopJava衍生出来的,所以也就难怪了。还好这也是只是配置环境时的问题,后续的应用开发还是挺方便的。