基于开源项目Azkaban的二次开发

2018-11-01 03:04廖锴宇卢致源余秋明
电脑知识与技术 2018年19期
关键词:二次开发大数据

廖锴宇 卢致源 余秋明

摘要:Azkaban,一个工作在大数据Hadoop领域的主流工作流调度器之一。为更好地使用该任务调度系统完成一系列任务,要对其源码研究并进行二次开发以实现自己所需要的功能。該文首先对开源项目Azkaban任务调度系统进行分析,接着在其原生系统上二次开发并新增实现了四个功能:任务一键重做功能、默认参数功能、数据时间显示功能、任务配置方式改良。经测试,四个功能模块都已良好实现。

关键词:大数据;开源项目;二次开发;Azkaban;任务调度系统

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2018)19-0087-02

大数据中每一条数据必须要经过采集,传输,计算,展示等过程才能挖掘出利用到其价值。那么如何把这些步骤连起来使之有序稳定的工作亦成了问题的关键。故需要一个好的调度平台来进行各种任务的调度管理。Azkaban,就是这样一个在Hadoop领域的主流的工作流调度器之一。Azkaban是由Linkedin开源的一个批量工作流任务调度器,用于在一个工作流内以一个特定的顺序运行一组工作和流程。但是想要用好Azkaban这一任务调度器,还必须要对其源码研究并对其进行二次开发以实现自己所要的功能。

1 系统分析

Azkaban系统具体划分为web server和executor server两大模块。Web server功能模块主要有登录、项目管理、项目创建、上传任务、任务定时、执行任务、查看任务执行情况、查看历史任务等功能,如图1所示。

Executor server功能包括调度hadoop任务、调度shell脚本任务、调度hive任务、任务负载均衡、单点故障等,如图2所示意。

2 新功能设计

2.1 任务重做功能设计

作为一个任务调度系统,系统维持着很多的任务调度,那么这些任务必然有部分任务会出现异常或者失败。这时候就需要人员人工介入排查任务异常,再解决问题后必然要重新调起任务。那么在此时如果以原生Azkaban系统来完成的话需要点击任务,然后点击执行,然后输入参数,然后确认执行这4个步骤,虽然开源完成但是比较复杂,而且参数方面还要重新输入和原本的一致的参数。

所以,为了方便用户能够快速的重新调起异常失败的任务,需要增加一个一键重做的新功能。新增任务重做功能使得任务在人工排查完问题后能够快速的重新调起执行,跳过的复杂的传参数再确认的操作,更加方便人性化。

2.2 增加默认参数设计

在执行任务流时,Flow Parameters选项中进行参数传递。通过点击Add Row按钮添加Key-Value形式的参数。在原生系统中是没有任何固定默认参数,但实际使用中,业务流程是相对固定的,即多数任务都需要某些相同的参数。所以很有必要进行默认参数功能的添加,具体实现。

2.3 任务历史页面增加显示数据时间设计

原生Azkaban系统history页面有Execution Id(执行id)、Flow(任务流名称)、Project(项目名称)、User(执行者)、Start Time(任务开始时间)、End Time(任务结束时间)、Elapsed(时长)、Status(状态)、Action(操作)这9个展示项。另外值得一提的是Action这项原生系统竟然是空白,所以重做功能也就放在了此处。

2.4 改良任务配置方式

原生Azkaban系统任务配置流程为,先在.job文件中配好如下文件:

type=command command=echo "hello" command.1=echo "world"command.2=echo "azkaban"

然后多个.job文件打包成一个zip包,最后在web页面project点击Upload上传改zip包。此时Azkaban会自动解析zip包形成一个job flow任务流。注意整个过程中.job文件内格式固定不能错,.job文件格式和.zip压缩格式也是固定的。而且更为糟糕的是每次修改任务都得把以上步骤重复一遍。

所以对Azkaban系统进行新增web页面任务配置功能。在首页新增选项按钮“任务配置”。点击进入后有任务列表页面,点击“Add”即可进入如的任务配置页面,配置完成后回到任务列表页面然后点击“Upload”提交即整个任务配置完成,整个流程方便快捷,易于操作。

3 新功能实现

3.1 代码分析

Azkaban的执行代码主要分为三大模块:azkaban-web-server:主要提供web界面展示和接收http请求的模块;azkaban-exec-server:具体执行任务的模块;azkaban-common:公共模块,提供访问数据库,告警,定时器等公共类

3.1.1 azkaban-web-server模块

AzkabanWebServer.java为web服务程序入口类,该类的主要代码逻辑为:

1)加载 conf 目录下的 azkaban.properties 和 azkaban.private.properties 两个文件,获取用户配置的系统参数;2)构建Server服务对象,Azkaban的web服务由Jetty提供的;3)是否采用ssl,由配置参数jetty.use.ssl的值确定,如果为true,则访问的时候需要用https,否则默认为http服务;4)构建Context;5)配置静态资源路径;6)配置动态请求路径对应的Servlet,每种请求类型都由对应的servlet处理;7)启动服务。

根据AzkabanWebServer中定义的请求处理路径,/executor 请求将会分发到ExecutorServlet.javat类,该类进行处理请求然后进一步调用方法。

3.1.2 azkaban-common模块

azkaban是典型的JavaWeb系统,如果说azkaban-webserver是表现层的话,那azkaban-common就是业务层和持久层,业务层逻辑封装在各个XXXManager中,持久层就是JdbcExecutorLoader类executorManager.submitExecutableFlow调用了azkaban-common模块的ExecutorManager类下的submitExecutableFlow方法,该方法封装exflow变量的各种属性值后,调用以下代码进行入库executorLoader.uploadExecutableFlow(exflow);同时调用dispatch方法从后台发送请求到azkaban-execserver模块进行具体任务的執行dispatch(reference, exflow, choosenExecutor);

3.1.3 azkaban-exec-server模块

AzkabanExecutorServer为程序入口类,其main方法也像web模块一样,封装了各个请求路径的处理servlet所以在common模块看到的代码callExecutorForJsonObject(host, port, "/executor", paramList);其实就是请求了这里的ExecutorServlet类进行处理

3.2 数据库设计

前面已经完成了Azkaban代码上的修改,但涉及任务配置功能的改变还修改新增数据库表才能实现,这在代码中也有体现。新增两张数据库表。表名jobs,用于储存任务信息。表status,用于储存任务状态。

4 小结

经测试,对于以上开源项目Azkaban任务调度系统二次开发的四个功能模块都已良好实现。1)job任务一键重做。对于失败任务或者其他原因需要再次调度的任务,如果按现有功能需要再重新进行传残等复杂操作才能再度调起。为了方便运维调度,现进行开发在web页面上增加重做选项功能。2)增加默认参数。现有azkaban在web页面可以接受多个key-value形式的参数,在原生系统中是没有任何固定默认参数,但实际使用中,业务流程是相对固定的,即多数任务都需要某些相同的参数。所以很有必要进行默认参数功能的添加。3)历史任务页面增加显示数据时间。现有azkaban在历史任务页面只能查看到任务执行时间而不能查看任务所执行的数据时间。所以需要在历史任务页面增加查看数据时间功能。4)改良project的配置由KV格式gz压缩文件上传方式改为更方便简单的web页面配置方式。现有azkaban对于project的配置是由KV格式gz压缩文件上传,每次更改需要重新上传一份gz文件,较为麻烦。所以对此进行开发改为更方便简单的web页面配置方式。

参考文献:

[1] Tom White.Hadoop权威指南[M].北京:清华大学出版社,2017.

[2] Lambert M Surhone.jetty(Web Werver)[M].美国:Beta Publishing,1988.

[3] Benjamin Muschko.gradle实战[M].北京:电子工业出版社,2015.

[4] George Reese.JDBC与Java数据库编程[M].北京:中国电力出版社,2002.

[5] gihub.io[EB/OL]. http://azkaban.gihub.io/azkaban/docs/latest.

[6] gihub.io[EB/OL].https://azkaban.github.io/.

猜你喜欢
二次开发大数据
浅谈基于Revit平台的二次开发
西门子Operate高级编程的旋转坐标系二次开发
浅谈Mastercam后处理器的二次开发
大数据环境下基于移动客户端的传统媒体转型思路
Micaps3.2 版本二次开发入门浅析
ANSYS Workbench二次开发在汽车稳定杆CAE分析中的应用
基于Pro/E二次开发的推土铲参数化模块开发