在做服务器开发时,我们经常会涉及到定时任务的处理。在linux环境,常用而简便的方式是使用crontab来定时启动执行我们的任务。但是这种方式也存在问题,如:不能方便的查看到任务的成功失败状态,任务的执行时长等信息。下面我介绍一种使用Azkaban来进行定时任务调度的方案。
1、Azkaban系统简介
azkaban是一个任务调度系统,当前我已经在用于emr计算任务的定时调度,emr集群的定时清理等任务处理中。整个azkaban系统包括web server和exec server两部分,web server提供了web页面访问,并能够前端页面上进行任务的创建,任务包的上传,任务执行调度,执行日志及状态查看,定时任务设置等操作。exec server是具体的执行服务器,接收web server下发的执行任务进行处理。
2、Azkaban用于调度定时任务的优点
由于azkaban系统能够支持包括hive任务,spark任务,命令行任务等多种任务。所以可以使用azkaban来进行日常定时任务的处理。其优势在于:
- 可以简单直观的通过web页面管理定时任务
- 方便的查看定时任务的状态和执行日志
- 对定时任务的历史情况也可以快速查看
- 通过azkaban回调系统对任务的执行情况进行监控告警
- 通过azkaban的http接口进行事件触发式启动任务。
3、任务打包azkaban系统的任务包都以zip包的形式组织,我们的demo目录结构如下:
|-- azkaban_task_demo.project
|-- azkaban_task_demo.zip
|-- crontab_test.flow
|-- task
| -- test.sh
-- task_tools
|-- bin
|-- conf
-- lib
- 其中需要有azkaban_task_demo.project文件制定azkaban flow类型
- 可以定义一个或多个.flow文件来制定工作流,如上面的:crontab_test.flow
- 建议将待执行的脚本统一放置在一个文件夹下,如上面的:task
- 如果是二进制可执行文件,建议按上面的task_tools目录进行文件,配置,依赖库等组织
- 在azkaban_task_demo.project同级目录下将所有文件打包为zip文件,如上面的:azkaban_task_demo.zip
- 将这个zip包通过web上传到azkban系统即可
4、包上传及启动执行在azkaban的web界面,首先需要创建一个新的project
- 创建成功后,即可上传之前打包好的zip包
- 上传完成后,即可看到项目中定义的工作流,多个工作流会并行展示
- 工作流可以展开来查看有哪些任务
- 点击Execute Flow后可以看到流中不同工作的关系,如并行、依赖等
- 执行任务左边可以进行部分参数定义,其中Concurrent定义了项目能否并发执行,如果可能相同project同时执行多个,需要关注此项
- 如果是手动执行,可以点击右下方Execute开始执行
- 如果是定时执行,则点击左下角Schedule选项添加定时任务,定时的方式可参考提示,与Linux crontab对定时任务的定义基本一致。
- 任务执行情况及日志在history选项卡中进行查看
- 进入具体的执行ID可以查看执行的日志输出情况
5、工作流定义
- 我们使用的是Azkaban对工作流定义的2.0版本
- flow文件定义:config部分定义了通用的变量配置信息,其中也定义了任务处理回调的接口地址,。回调部分,每个任务都建议加入。node部分定义了计算节点,name为节点名称,type为任务类型,命令行任务都为command,config下的command定义需要执行的shell命令,dependsOn定义了节点的依赖关系。
6、总结
上面介绍了使用azkaban来进行定时任务调度的实现方法,可以使得我们能从web界面便捷的看到我们定时任务的执行成功失败情况,也可以便捷的查看任务输出的日志信息,是一种管理定时任务的便捷方法。