1、Azkaban 介绍
1.1 背景
一个完整的大数据分析系统,必然由不少任务单元 (如数据收集、数据清洗、数据存储、数据分析等) 组成,全部的任务单元及其之间的依赖关系组成了复杂的工做流。复杂的工做流管理涉及到不少问题:git
- 如何定时调度某个任务?
- 如何在某个任务执行完成后再去执行另外一个任务?
- 如何在任务失败时候发出预警?
- ......
面对这些问题,工做流调度系统应运而生。Azkaban 就是其中之一。github
1.2 功能
Azkaban 产生于 LinkedIn,并通过多年生产环境的检验,它具有如下功能:web
- 兼容任何版本的 Hadoop
- 易于使用的 Web UI
- 可使用简单的 Web 页面进行工做流上传
- 支持按项目进行独立管理
- 定时任务调度
- 模块化和可插入
- 身份验证和受权
- 跟踪用户操做
- 支持失败和成功的电子邮件提醒
- SLA 警报和自动查杀失败任务
- 重试失败的任务
Azkaban 的设计理念是在保证功能实现的基础上兼顾易用性,其页面风格清晰明朗,下面是其 WEB UI 界面:数据库
2、Azkaban 和 Oozie
Azkaban 和 Oozie 都是目前使用最为普遍的工做流调度程序,其主要区别以下:服务器
功能对比
- 二者都可以调度 Linux 命令、MapReduce、Spark、Pig、Java、Hive 等工做流任务;
- 二者都可以定时执行工做流任务。
工做流定义
- Azkaban 使用 Properties(Flow 1.0) 和 YAML(Flow 2.0) 文件定义工做流;
- Oozie 使用 Hadoop 流程定义语言(hadoop process defination language,HPDL)来描述工做流,HPDL 是一种 XML 流程定义语言。
资源管理
- Azkaban 有较严格的权限控制,如用户对工做流进行读/写/执行等操做;
- Oozie 暂无严格的权限控制。
运行模式
- Azkaban 3.x 提供了两种运行模式:
- solo server model(单服务模式) :元数据默认存放在内置的 H2 数据库(能够修改成 MySQL),该模式中
webServer
(管理服务器) 和 executorServer
(执行服务器) 运行在同一个进程中,进程名是 AzkabanSingleServer
。该模式适用于小规模工做流的调度。
- multiple-executor(分布式多服务模式) :存放元数据的数据库为 MySQL,MySQL 应采用主从模式进行备份和容错。这种模式下
webServer
和 executorServer
在不一样进程中运行,彼此之间互不影响,适合用于生产环境。
- Oozie 使用 Tomcat 等 Web 容器来展现 Web 页面,默认使用 derby 存储工做流的元数据,因为 derby 过于轻量,实际使用中一般用 MySQL 代替。
3、总结
若是你的工做流不是特别复杂,推荐使用轻量级的 Azkaban,主要有如下缘由:框架
- 安装方面:Azkaban 3.0 以前都是提供安装包的,直接解压部署便可。Azkaban 3.0 以后的版本须要编译,这个编译是基于 gradle 的,自动化程度比较高;
- 页面设计:全部任务的依赖关系、执行结果、执行日志均可以从界面上直观查看到;
- 配置方面:Azkaban Flow 1.0 基于 Properties 文件来定义工做流,这个时候的限制可能会多一点。可是在 Flow 2.0 就支持了 YARM。YARM 语法更加灵活简单,著名的微服务框架 Spring Boot 就采用的 YAML 代替了繁重的 XML。
更多大数据系列文章能够参见 GitHub 开源项目: 大数据入门指南分布式