1.Azkaban介绍
- 为什么需要工作流调度系统
1)一个完整的数据分析系统通常都是由大量任务单元组成: shell 脚本程序,java 程序,mapreduce 程序、hive 脚本等
2)各任务单元之间存在时间先后及前后依赖关系
3)为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行; 例如,我们可能有这样一个需求,某个业务系统每天产生 20G 原始数据,我们每天都 要对其进行处理,处理步骤如下所示:
1)通过 Hadoop 先将原始数据上传到 HDFS 上(HDFS 的操作);
2)使用 MapReduce 对原始数据进行清洗(MapReduce 的操作);
3)将清洗后的数据导入到 hive 表中(hive 的导入操作);
4)对 Hive 中多个表的数据进行 JOIN 处理,得到一张 hive 的明细表(创建中间表);
5)通过对明细表的统计和分析,得到结果报表信息(hive 的查询操作);
4)图总结:

-
Azkaban 的适用场景
根据以上业务场景: (2)任务依赖(1)任务的结果,(3)任务依赖(2)任务的结果,(4)任务依赖(3)任务的结果,(5)任务依赖(4)任务的结果。一般的做法是,先 执行完(1)再执行(2),再一次执行(3)(4)(5)。
这样的话,整个的执行过程都需要人工参加,并且得盯着各任务的进度。但是我们的很 多任务都是在深更半夜执行的,通过写脚本设置 crontab 执行。其实,整个过程类似于一个 有向无环图(DAG)。每个子任务相当于大任务中的一个节点,也就是,我们需要的就是一 个工作流的调度器,而 Azkaban 就是能解决上述问题的一个调度器。 -
什么是 azkaban
Azkaban 是由 Linkedin 公司推出的一个批量工作流任务调度器,主要用于在一个工作流 内以一个特定的顺序运行一组工作和流程,它的配置是通过简单的 key:value 对的方式,通 过配置中的 dependencies 来设置依赖关系。Azkaban 使用 job 配置文件建立任务之间的依赖 关系,并提供一个易于使用的 web 用户界面维护和跟踪你的工作流。 -
Azkaban 特点
- 兼容任何版本的 hadoop
- 易于使用的 Web 用户界面
- 简单的工作流的上传
- 方便设置任务之间的关系
- 调度工作流
- 模块化和可插拔的插件机制
- 认证/授权(权限的工作)
- 能够杀死并重新启动工作流
- 有关失败和成功的电子邮件提醒
-
常见工作流调度系统
1)简单的任务调度:直接使用 crontab 实现;
2)复杂的任务调度:开发调度平台或使用现成的开源调度系统,比如 ooize、azkaban 等 -
ooize 和 azkaban 特性对比
下面的表格对上述四种 hadoop 工作流调度器的关键特性进行了比较,尽管这些工作流 调度器能够解决的需求场景基本一致,但在设计理念,目标用户,应用场景等方面还是存在 显著的区别,在做技术选型的时候,可以提供参考
特性 | Oozie | Azkaban |
---|---|---|
工作流描述语言 | XML | text file with key/value pairs |
是否要 web 容器 | Yes | Yes |
进度跟踪 | web page | web page |
Hadoop job 调度支持 | yes | yes |
运行模式 | daemon | daemon |
事件通知 | no | Yes |
需要安装 | yes | yes |
支持的 hadoop 版本 | 0.20+ currently | unknown |
重试支持 | workflownode | evel yes |
运行任意命令 | yes | yes |
-
Azkaban 的架构
Azkaban 由三个关键组件构成:
Azkaban组件
1)AzkabanWebServer:AzkabanWebServer 是整个 Azkaban 工作流系统的主要管理者, 它用户登录认证、负责 project 管理、定时执行工作流、跟踪工作流执行进度等一 系列任务。
2)AzkabanExecutorServer:负责具体的工作流的提交、执行,它们通过 mysql 数据库 来协调任务的执行。
3)关系型数据库(MySQL):存储大部分执行流状态,AzkabanWebServer 和 AzkabanExecutorServer 都需要访问数据库。
2.Azkaban安装部署
-
安装包准备
azkaban-db-0.1.0-SNAPSHOT.zip
azkaban-3.56.0.zip
下载地址:
https://download.csdn.net/download/qq_28286027/12532167 -
解压
unzip azkaban-db-0.1.0-SNAPSHOT.zip
unzip azkaban-3.56.0.zip
-
在MySQL创建Azkaban数据库和赋权限
mysql> create database azkaban;
Query OK, 1 row affected (0.02 sec)
mysql> create user 'azkaban'@'%' identified by 'azkaban';
Query OK, 0 rows affected (0.09 sec)
mysql> grant all privileges on anzkaban.* to azkaban;
Query OK, 0 rows affected (0.02 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.02 sec)
- 执行上面解压后圈出的sql
mysql> use azkaban;
Database changed
mysql> source /usr/local/src/azkaban-db-0.1.0-SNAPSHOT/create-all-sql-0.1.0-SNAPSHOT.sql
Query OK, 0 rows affected (0.04 sec)
Query OK, 0 rows affected (0.05 sec)
Query OK, 0 rows affected (0.02 sec)
...
执行完毕

- 配置
进入azkaban-3.56解压的目录中,发现有两个目录exec-server和web-server,进入exec-server的conf目录下:
vim azkaban.properties
default.timezone.id=Asia/Shanghai
executor.global.properties=/usr/local/src/azkaban-3.56.0/web-server/conf/global.properties
mysql.host=master
mysql.password=111111
进入web-server的conf目录下:
vim azkaban.properties
default.timezone.id=Asia/Shanghai
executor.global.properties=/usr/local/src/azkaban-3.56.0/exec-server/conf/global.properties
user.manager.xml.file=/usr/local/src/azkaban-3.56.0/web-server/conf/azkaban-users.xml
mysql.host=master
mysql.password=111111
- 启动服务脚本
- 给脚本赋予可执行权限
给exec-server下的脚本赋予权限:
cd /usr/local/src/azkaban-3.56.0/exec-server/bin
chmod +x *.sh
cd internal/
chmod +x *.sh
给web-server下的脚本赋予权限:
cd /usr/local/src/azkaban-3.56.0/web-server/bin
chmod +x *.sh
cd internal/
chmod +x *.sh
- 启动脚本
启动exec-server下的脚本:
cd /usr/local/src/azkaban-3.56.0/exec-server
./bin/start-exec.sh
启动web-server下的脚本:
cd /usr/local/src/azkaban-3.56.0/web-server
./bin/start-exec.sh
jsp查看进程,只发现有exec-server启动:

进入/usr/local/src/azkaban-3.56.0/web-server目录下,查看启动报错,报错信息如下:

解决办法:
修改web-server下的azkaban.properties配置,增加:executor.port=12321
再次启动,成功。
访问http://master:8081/

网友评论