使用Azkaban进行定时任务调度

2019-02-21 21:33:23 浏览数 (1)

在做服务器开发时,我们经常会涉及到定时任务的处理。在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

image.pngimage.png
  • 创建成功后,即可上传之前打包好的zip包
image.pngimage.png
  • 上传完成后,即可看到项目中定义的工作流,多个工作流会并行展示
image.pngimage.png
  • 工作流可以展开来查看有哪些任务
image.pngimage.png
  • 点击Execute Flow后可以看到流中不同工作的关系,如并行、依赖等
image.pngimage.png
  • 执行任务左边可以进行部分参数定义,其中Concurrent定义了项目能否并发执行,如果可能相同project同时执行多个,需要关注此项
  • 如果是手动执行,可以点击右下方Execute开始执行
  • 如果是定时执行,则点击左下角Schedule选项添加定时任务,定时的方式可参考提示,与Linux crontab对定时任务的定义基本一致。
image.pngimage.png
  • 任务执行情况及日志在history选项卡中进行查看
image.pngimage.png
  • 进入具体的执行ID可以查看执行的日志输出情况
image.pngimage.png

5、工作流定义

  • 我们使用的是Azkaban对工作流定义的2.0版本
  • flow文件定义:config部分定义了通用的变量配置信息,其中也定义了任务处理回调的接口地址,。回调部分,每个任务都建议加入。node部分定义了计算节点,name为节点名称,type为任务类型,命令行任务都为command,config下的command定义需要执行的shell命令,dependsOn定义了节点的依赖关系。
image.pngimage.png

6、总结

上面介绍了使用azkaban来进行定时任务调度的实现方法,可以使得我们能从web界面便捷的看到我们定时任务的执行成功失败情况,也可以便捷的查看任务输出的日志信息,是一种管理定时任务的便捷方法。

0 人点赞