首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Azkaban所支持的Job类型及示例

Azkaban所支持的Job类型及示例

作者头像
凡梦星尘
发布2024-11-20 17:26:06
发布2024-11-20 17:26:06
1630
举报
文章被收录于专栏:Hugo博客Hugo博客

在官方文档的介绍中,了解到Azkaban所支持的工作类型还是很丰富的,如:CommandHadoopShellPythonJavaHivePig等等。不过在此我们主要具体只来讲解下PythonJava的工作类型任务,其它工作类型的话,比如CommnadHiveHadoopShell相对比较简单就不做详解,有需要的话可以自行实践一下。

不管提交哪一种任务,Azkaban默认都是通过上传压缩包来管理,那么在此建议大家养成一个习惯,不要所执行的文件(代码)打包到Azkaban的工程包里面。这样带来的好处是显而易见的,比如:

  • 工程创建的速度快,不需要上传执行部分文件
  • 避免了修改MySQL中的max_allow_packet参数以解决工程文件上传失败的问题
  • 在分布式布署环境中,当执行Task免去了在不同节点中拷贝工程包的麻烦

Java工作任务

由于工作业务场景中,大部分的代码都是Java来编写的,这也正是选择Azkaban的重要原因。与常见的Java程序并无太大的差异,唯一的不同便是程序入口的方法不一样。需要在入口的类中增加个**run**方法,即这方法是启动整体个Task的关键。示例代码如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33

package io.github.elkan1788.azkabantasks; import azkaban.utils.Props; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Azkaban java job example * @author elkan1788@gmail.com */ public class JobMain { private static final Logger logger = LoggerFactory.getLogger(JobMain.class); private int fileRows; private int fileLine; /** * Dynamic parameters set */ public JobMain(String name, Props props) { this.fileRows = props.getInt("file.rows"); this.fileLine = props.getInt("file.line"); } public void run() throws Exception { logger.info(" ### this is JavaMain method ###"); logger.info("fileRows value is ==> " + fileRows); logger.info("fileLine value is ==> " + fileLine); } }

在上面的示例代码中,增加了动态参数设置,最后在打包的时候并不需要指定MainClass的所在,只要项目中的所有相关的代码及依赖打包到一个独立的文件即可。

另外我们还需要构建一个Azkaban工程脚本来告诉它如何执行我们的任务,脚本示例如下:

1 2 3 4 5 6 7 8

type=java job.class=io.github.elkan1788.azkabantasks.JobMain #指定执行jar包的路径 classpath=/home/azkaban/javademo/* #用户参数1 file.rows=10 #用户参数2 file.line=50

为了不让任务太单调,顺便个简单的命令输出,组成个FLOW形式输出,参考脚本如下:

1 2 3

type=command dependencies=java command=whoami

效果如下:

Azkaban-Jobs02
Azkaban-Jobs02

Pthon工作任务

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

  • command类型

1 2

type=command command=python -u /home/azkaban/pythondemo/helloworld.py

  • python类型

1 2 3

type=python python=python script=/home/azkaban/pythondemo/helloworld.py

效果如下:

Azkaban-Jobs01
Azkaban-Jobs01

总结

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Java工作任务
  • Pthon工作任务
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档