Azkaban - 核心原理、特点、以及架构详解
作者:hangge | 2025-06-05 08:43
1,什么是 Azkaban?
(1)Azkaban 是由 Linkedin 开源的一个批量工作流任务调度器,用于在一个工作流内以一个特定的顺序运行一组工作和流程。
(2)Azkaban 定义了一种 Key-Value 格式来建立任务之间的依赖关系,并提供一个易于使用的 Web 用户界面维护和跟踪工作流,如下图所示。

2,Azkaban 的特点
Azkaban 凭借着轻量级、简单易用等特性,在分布式任务调度系统领域占据了一定的地位。其主要具备以下特点:
- 基于 Web 的友好易用界面。
- 支持工作流调度。
- 支持模块化和插件化。
- 支持认证和授权。
- 提供了分布式多执行器。
- 支持邮件告警机制。
- 提供了任务失败自动重试机制。
3,Azkaban 的核心架构
(1)Azkaban 主要由 3 个核心组件组成,如下图所示:

(2)各组件功能如下:
- Web Server:提供了 Web 界面,是 Azkaban 的主要管理者,包括项目的管理、认证、调度,以及对工作流执行过程的监控。
- Executor Server:负责调度工作流和任务,记录工作流和任务的运行日志。
- 关系型数据库(MySQL):Azkaban 使用 MySQL 来存储任务和执行信息,Web Server 和 Executor Server 在运行期间需要访问 MySQL。
4,Azkaban 的调度流程
Apache Azkaban 的调度流程可以概括为以下几个步骤:
- 定义作业流:使用 Azkaban 的 Web 界面或 Azkaban 的 DSL 语言,用户定义作业流并指定任务之间的依赖关系。作业流由一系列任务组成,可以按照顺序或并行方式执行。
- 作业提交:当作业流需要执行时,Azkaban 会将任务提交到执行环境中(如 Hadoop 集群)。这可以通过调用相应的执行引擎(如 Azkaban Executor)来实现。任务提交时,Azkaban 会将任务的相关信息和依赖关系传递给执行引擎。
- 依赖关系解析:执行引擎接收到任务后,会解析任务之间的依赖关系。它会检查每个任务所依赖的其他任务是否已经完成。如果有未满足的依赖关系,任务将等待依赖任务完成后再执行。
- 任务执行:一旦任务的依赖关系满足,执行引擎会开始执行任务。任务可以是各种类型,如 Hadoop 作业、Shell 脚本、Spark 作业等。执行引擎会调用相应的执行器来执行任务,并提供所需的参数和配置。
- 任务监控和日志:在任务执行期间,Azkaban 会实时监控任务的执行状态,并记录任务的日志输出。用户可以通过 Azkaban 的 Web 界面查看任务的执行进度、日志和错误信息。这有助于及时发现和排查执行问题。
- 依赖关系检查:在任务执行完成后,执行引擎会检查任务的输出和后续任务的依赖关系。如果有后续任务依赖当前任务的输出,执行引擎会传递相应的输出给后续任务,并继续执行后续任务。
- 完成和报告:当作业流中的所有任务都执行完成后,Azkaban 会将作业流的执行状态标记为完成,并生成执行报告。报告可以包括任务的执行结果、执行时间、日志等信息,以便用户进行审查和分析。

5,Azkaban 的运行模式
(1)Azkaban 主要支持 3 种运行模式,如下图所示:

(2)Solo Server Mode:这种模式属于单机模式,主要有以下 3 个优点:
- 易于安装:无须安装 MySQL 数据库,内置 H2 数据库作为主要的持久存储。
- 易于启动:Web Server 和 Executor Server 都在同一个进程中运行。
- 全功能:包含所有 Azkaban 的功能,在使用层面没有区别。
注意:但是这种模式也有缺点——存在单点故障问题。如果任务量不大,对稳定性要求不是特别高,则可以使用这种模式。
(3)Two Server Mode:这种模式的存储系统使用的是 MySQL,Web Server 和 Executor Server 运行在不同的进程中。
注意:由于 Executor Server 只有一个,所以这种模式依然会存在单点故障。
(4)Multiple Executor Server Mode:这种模式的存储系统使用的是 MySQL,Web Server 和 Executor Server 运行在不同服务器中,并且 Executor Server 会有多个,这样可以解决单点故障。
注意:这种模式中 Web Server 只有一个,如果出现故障,不会影响已有任务的执行,只是不能通过 Web 界面新增任务,以及查看任务信息。
全部评论(0)