什么是Azkaban

Azkaban是一款基于Java编写的任务调度系统

任务调度:有四个任务脚A、B、C、D,其中任务A与任务B可以并行运行,然后任务C依赖任务A和任务B的运行结果,任务D依赖任务C的运行结果,此时整个过程可以等效为一个有向无环图,而给所有的任务运行定一个运行规则就可以理解为任务调度。

在任务简单时可以人为控制,但是当任务非常多,依赖复杂时,如果没有清晰的任务规划图,很容易在任务之间形成闭环从而出错,或者多个可并行的任务没有并行执行而浪费资源,这种时候就需要一个工作流调度器,Azkaban就是完成这种任务的。

Azkaban分为三个部分:

  1. mysql服务器:用于存储项目、日志或者执行计划之类的信息
  2. web服务器:使用Jetty对外提供web服务,使用户可以通过web页面方便管理
  3. executor服务器:负责具体的工作流的提交、执行

Azkaban服务器交互图

基础搭建

首先可从Azkaban官网上下载azkaban,初学时可以只下载
azkaban-web-server-2.5.0.tar.gzazkaban-executor-server-2.5.0.tar.gzazkaban-sql-script-2.5.0.tar.gz
三个组件压缩包即可,下载后进行解压
azkaban-sql-script-2.5.0.tar.gz包中包含的都是Azkaban所需用到的所有数据库表的创建语句,在Azkaban 2.5.0版本的这个包中会有一个create-all.sql文件,可以一次性创建好所有的数据库表。
azkaban-web-server-2.5.0.tar.gz解压后在其conf/azkaban.properties文件中可以进行web服务器数据库连接,web访问方式与端口,web访问账号密码,邮件等设置,各位根据自己的实际情况进行配置。
azkaban-executor-server-2.5.0.tar.gz解压后在其conf/azkaban.properties文件中可以进行执行服务器数据库连接,执行服务器线程数等设置。

在这些都设置好以后,浏览器访问对应IP与端口,即可进入Azkaban的web界面了。此时Azkaban的基础搭建基本完成。

了解各个元素及其关系

Azkaban界面中的主要元素有三个,分别是project、job与flow
project可以理解为某个项目,其项目中包含了许多需要执行的任务,即为job,各个job之间形成依赖关系,便组成了工作流flow

创建工作 job 与创建工作流 flow

在Azkaban系统的web界面中有创建project的交互,可以通过界面创建一个project,但是Azkaban没有创建job与flow的界面,这一点很讨厌。于是需要编写以.job为扩展名的文件然后上传,才能在系统中形成job任务。

创建job

首先,需要创建以.job为扩展名的文件,一个文件即代表一个任务。

所有的job都需要一个知道他们如何去执行的type。一般的,有这样四种job类型:Java、command、javaprocess和pig。
本文以type=command为例

其次在这个文件中添加这个任务所需的参数与参数值,
必须的参数有typecommand
例如

type=commandcommand=echo ‘jobs start‘

四类job类型的文件都可以添加的参数有
retries --> 任务失败时自动重启的次数
retry.backoff --> 每一次任务尝试重启时之间等待的毫秒数
working.dir --> 可以重新指定任务执行的工作目录,默认为目前正在运行的任务的工作目录
failure.emails --> 任务失败时的邮件提醒设置,以逗号分隔多个邮箱
success.emails --> 任务成功时的邮件提醒设置,以逗号分隔多个邮箱
notify.emails --> 任务无论失败还是成功都邮件提醒设置,以逗号分隔多个邮箱
dependencies--> 定义该文件依赖的文件,值为被依赖文件的文件名,多个目标以逗号分隔,不加扩展名
保存为start.job文件即创建好了一个job

Azkaban每个project中只能上传一个.zip文件

创建工作流flow

定义好所有的参数后即为定义好了一个job,如果添加了dependencies参数即形成了工作流flow
以开头的任务流为例:

#start.jobtype=commandcommand=echo "jobs start"
#A.jobtype=commandcommand=echo "This A job"dependencies=start
#B.jobtype=commandcommand=echo "This B job"dependencies=start
#C.jobtype=commandcommand=echo "This C job"dependencies=A,B
#D.jobtype=commandcommand=echo "This D job"dependencies=C

保存好5个文件后,将5文件打包成zip,然后在界面中进行上传,就会将这几个job上传到了系统中,最终呈现

从而一个工作流flow建好。

注意,想多个工作流flow并到一张图中,必须多个工作流flow有一个公共的结束job文件

创建子工作流subflow及其作用

Azkaban可以给每一个flow设定定时调度,这样就可以等到特定时间运行,然而,这样依旧不能满足一些需求
例如:
一个整个平台的任务调度中,大部分的job任务是根据依赖依次进行,但是有某些个job则依然需要自己的运行设定时间,即上一个job完成后需要等待,不能立即执行下一个job,但是Azkaban给job任务单独设定时后,会覆盖整个任务流flow的设置,所以此时需要引进子任务流subflow
子任务流的创建需要一个job文件,其参数形式为

type= xxx
flow.name= xxxdependencies= xxx

注意
子流文件的参数设置需要遵循:

  1. flow.name为设定的子流subflow的结束job文件的文件名
  2. 子流内部的起始文件不存在依赖 ,其依赖关系在type=flow这个文件中设定
  3. 子流后面的文件的依赖则为type=flow这个job文件的文件名

所以上面这个例子中
添加一个文件:

#subflow.jobtype=flowflow.name=Cdependencies=start

相应修改文件:

#A.jobtype=commandcommand=echo "This A job"
#B.jobtype=commandcommand=echo "This B job"
#D.jobtype=commandcommand=echo "This D job"dependencies=subflow

此时工作流会变为

这样在这个project中,就可以分别对两个流进行调度的设定,并且主流中的依赖会等待子流的运行,总体任务调度图也会非常的清晰

邮件提醒设置

Azkaban自带有邮件提醒功能,在web服务器的conf/azkaban.properties文件中,有以下字段

# mail settingsmail.host=mail.sender=mail.user=mail.password=job.failure.email=job.success.email=job.notify.email=

这里面所有的值都是设定的是邮件的发送者,当初以为是设定接受者,被坑了好久,而邮件的接受者设置则需要前文所说的job文件的failure.emailssuccess.emailsnotify.emails三个参数,但是这三个属性不是直接加在.job文件中,而是需要在所有.job文件的根目录下创建一个以.properties为扩展名的文件
例如:

# [email protected]
[email protected]

一些其他需要全局作用的参数也可以添加在这个文件中,此属性文件会作用于全局job文件,一起打包上传即可。这样就可以实现任务成功或失败时的邮件提醒。

最后

Azkaban还可以自行开发插件,不过这个系统依然有一些bug,如果后续有需求则需要慢慢修补了。

时间: 2024-11-18 10:48:19

什么是Azkaban的相关文章

Azkaban简介

一.Azkaban简介 Azkaban作为开源的调度系统,在大数据中有广泛地使用.它主要有三部分组成:Azkaban Webserver.Azkaban Executor. DB. 图1 Azkaban架构 图1所示的是Azkaban的基本架构:Webserver主要负责权限验证.项目管理.作业流下发等工作:Executor主要负责作业流/作业的具体执行以及搜集执行日志等工作:MySQL用于存储作业/作业流的执行状态信息.图中所示的是单executor场景,但是实际应用中大部分的项目使用的都是多

初识Azkaban

先说下hadoop 内置工作流的不足 (1)支持job单一 (2)硬编码 (3)无可视化 (4)无调度机制 (5)无容错机制 在这种情况下Azkaban就出现了 1)Azkaban是什么 Azkaban是由Linkedin开源的一个批量工作流任务调度器.用于在一个工作流内以一个特定的顺序运行一组工作和流程.Azkaban定义了一种KV文件格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流. 2)Azkaban的功能特点 ①Web用户界面 ②方便上传工作流 ③方便

Azkaban安装

1.Azkaban安装部署 azkaban-web-server-2.5.0.tar.gz azkaban-executor-server-2.5.0.tar.gz azkaban-sql-script-2.5.0.tar.gz 2.安装 将安装文件上传到集群,最好上传到安装 spark,hive.sqoop的机器上,方便命令的执行 mkdir azkaban azkaban web服务器安装 解压azkaban-web-server-2.5.0.tar.gz tar –zxvf azkaban

azkaban简单使用

步骤 1.通过web服务器创建项目,项目名称和描述都是必须填的2.上传zip包 job定义 1.简单的job一个job就是一个properties文件,只不过文件是以.job结尾,文件里面定义了job的类型和job的依赖关系 # foo.job type=command command=echo "Hello World" 这个job就是打印Hello World 2.带有依赖的job # foo.job type=command command=echo foo # bar.job

Hadoop工作流引擎之Azkaban与Oozie对比(四)

Azkaban是什么?(一) Azkaban的功能特点(二) Azkaban的架构(三) 不多说,直接上干货! http://www.cnblogs.com/zlslch/category/938837.html 目前,市面上最流行的两种Hadoop工作流引擎调度器Azkaban与Oozie. 具体,可以进一步看我的博客. Azkaban概念学习系列http://www.cnblogs.com/zlslch/category/938837.html 和Oozie概念学习系列http://www.

Azkaban的架构(三)

Azkaban是什么?(一) Azkaban的功能特点(二) 不多说,直接上干货! http://www.cnblogs.com/zlslch/category/938837.html Azkaban的架构 Azkaban是一种类似于Oozie的工作流控制引擎,可以用来解决多个Hadoop(或Spark等)离线计算任务之间的依赖关系问题. 也可以用其代替crontab来对周期性任务进行调度,并且更为直观,可靠,同时提供了美观的可视化管理界面. Azkaban由三部分构成:   1.Relatio

Azkaban的功能特点(二)

Azkaban是什么?(一) 不多说,直接上干货! http://www.cnblogs.com/zlslch/category/938837.html Azkaban的功能特点 它具有如下功能特点: 1.Web用户界面 2.方便上传工作流 3.方便设置任务之间的关系 4.工作流调度 5.认证/授权 6.能够杀死并重启工作流 7.模块化和可插拔的插件机制 8.项目工作区 9.工作流和任务的日志记录和审计

从源码看Azkaban作业流下发过程——记我的第一次白盒测试

一.Azkaban简介 Azkaban作为开源的调度系统,在大数据中有广泛地使用.它主要有三部分组成:Azkaban Webserver.Azkaban Executor. DB. 图1 Azkaban架构 图1所示的是Azkaban的基本架构:Webserver主要负责权限验证.项目管理.作业流下发等工作:Executor主要负责作业流/作业的具体执行以及搜集执行日志等工作:MySQL用于存储作业/作业流的执行状态信息.图中所示的是单executor场景,但是实际应用中大部分的项目使用的都是多

Harry Potter and the Prisoner of Azkaban

称号:Harry Potter and the Prisoner of Azkaban 作者:J.K. Rowling 篇幅: 448页 蓝思值:880L 用时:    11天 工具:  有道词典 [透析成果] 这是我读完的第4本英文原著.用词典查了151个单词.速度有明显提升.查询的生词数也降低了. 以下是全部单词: 1, indulge  [?n'd?ld?] vt. 满足:纵容:使高兴.使沉迷于-; vi. 沉溺:满足:放任 2, indulge in  [] vt. 沉湎于,沉溺于 3,