Azkaban详细介绍

Azkaban概述

        Azkaban是一个批处理工作流作业调度程序,在LinkedIn上创建,用于运行Hadoop作业,整体包括三部分webserver、dbserver、executorserver。Azkaban通过作业依赖项解决排序问题,并提供一个易于使用的web用户界面来维护和跟踪工作流。

Azkaban特点

  1. 兼容任何版本的Hadoop
  2. 易于使用的web UI,简单的web和http工作流上传
  3. 调度的工作流,模块化和pluginable,支持command、Java、Hive、Pig、Hadoop
  4. 用户动作跟踪,关于失败和成功的电子邮件提醒
  5. SLA报警和自动终止 和重新尝试失败的工作

Azkaban架构

在这里插入图片描述
Azkaban由三个关键组件构成:

  1. 关系型数据库(MySQL)
  2. AzkabanWebServer
  3. AzkabanExecutorServer

关系型数据库(MySQL)

Azkaban使用数据库存储大部分状态,AzkabanWebServer和AzkabanExecutorServer都需要访问数据库。
AzkabanWebServer使用数据库的原因如下:

  1. 项目管理:项目、项目权限以及上传的文件。
  2. 执行流状态:跟踪执行流程以及执行程序正在运行的流程。
  3. 以前的流程/作业:通过以前的作业和流程执行以及访问其日志文件进行搜索。
  4. 计划程序:保留计划作业的状态。
  5. SLA:保持所有的SLA规则

AzkabanExecutorServer使用数据库的原因如下:

  1. 访问项目:从数据库检索项目文件。
  2. 执行流程/作业:检索和更新正在执行的作业流的数据
  3. 日志:将作业和工作流的输出日志存储到数据库中。
  4. 交互依赖关系:如果一个工作流在不同的执行器上运行,它将从数据库中获取状态。

AzkabanWebServer

        AzkabanWebServer是整个Azkaban工作流系统的主要管理者,它负责project管理、用户登录认证、定时执行工作流、跟踪工作流执行进度等一系列任务。同时,它还提供Web服务操作的接口,利用该接口,用户可以使用curl或其他ajax的方式,来执行azkaban的相关操作。操作包括:用户登录、创建project、上传workflow、执行workflow、查询workflow的执行进度、杀掉workflow等一系列操作,且这些操作的返回结果均是json的格式。并且Azkaban使用方便,Azkaban使用以.job为后缀名的键值属性文件来定义工作流中的各个任务,以及使用dependencies属性来定义作业间的依赖关系链。这些作业文件和关联的代码最终以*.zip的方式通过Azkaban UI上传到Web服务器上。

AzkabanExecutorServer

        以前版本的Azkaban在单个服务中具有AzkabanWebServer和AzkabanExecutorServer功能,目前Azkaban已将AzkabanExecutorServer分离成独立的服务器,拆分AzkabanExecutorServer的原因有如下几点:

  1. 某个任务流失败后,可以更方便的将其重新执行
  2. 便于Azkaban升级
    AzkabanExecutorServer主要负责具体的工作流的提交、执行,可以启动多个执行服务器,它们通过mysql数据库来协调任务的执行。

Azkaban作业流执行过程

  1. Webserver根据内存中缓存的各Executor的资源状态(Webserver有一个线程会遍历各个active executor,去发送http请求获取其资源状态信息缓存到内存中),按照选择策略(包括executor资源状态、最近执行流个数等)选择一个executor下发作业流;
  2. executor判断是否设置作业粒度分配,如果未设置作业粒度分配,则在当前executor执行所有作业;如果设置了作业粒度分配,则当前节点会成为作业分配的决策者,即分配节点;
  3. 分配节点从zookeeper获取各个executor的资源状态信息,然后根据策略选择一个executor分配作业;
  4. 被分配到作业的executor即成为执行节点,执行作业,然后更新数据库。

Azkaban架构的运行模式

solo server mode

        最简单的模式,数据库内置的H2数据库,AzkabanWebServer和AzkabanExecutorServer都在一个进程中运行,任务量不大项目可以采用此模式。

two server mode

        数据库为MySQL,管理服务器和执行服务器在不同进程,这种模式下,AzkabanWebServer和AzkabanExecutorServer互不影响。

multiple executor mode

        该模式下,AzkabanWebServer和AzkabanExecutorServer运行在不同主机上,且AzkabanExecutorServer可以有多个。

        目前我们采用的是multiple executor mode方式,分别在不同的主机上部署多个AzkabanExecutorServer以应对高并发定时任务执行的情况,从而减轻单个服务器的压力。

Azkaban与其他任务调度比较

        常见的工作流调度器有 Oozie, Azkaban,Cascading,Hamake 等,简单的任务调度可以直接使用 linux 的 crontab 来定义,复杂的任务调度可以开发调度平台或使用现成的开源调度系统,比如 ooize、azkaban 等
目前比较主流的调度工具有ooize、azkaban,那么他们有什么特性和区别呢?

Oozie Azkaban 特性
XML (xPDL based) text file with key/value pairs 工作流描述语言
explicit explicit 依赖机制
Yes Yes web容器
web page web page 进度追踪
Yes Yes Hadoop job调度支持
daemon daemon 运行模式
Yes Yes 事件通知
Yes Yes 重试机制
Yes Yes 运行命令

总体来说,ooize相比azkaban是一个重量级的任务调度系统,功能全面,但配置使用也更复杂。

猜你喜欢

转载自blog.csdn.net/weixin_44327656/article/details/89374761