> 文章列表 > 大数据任务调度器 —— Azkaban 3.0 部署与简单应用

大数据任务调度器 —— Azkaban 3.0 部署与简单应用

大数据任务调度器 —— Azkaban 3.0 部署与简单应用

什么是 Azkaban ?

Azkaban 是一个分布式的 工作流程管理器 Workflow Manager,在 LinkedIn 实现,用于解决 Hadoop 作业依赖问题,处理需要按顺序运行的作业,从 ETL 作业到数据分析产品。

Azkaban 的架构

Azkaban 的架构由 3 个核心部分组成:

  • 关系数据库 —— MySQL

  • Azkaban Web Server —— Web 服务器

  • Azkaban Executor Server —— 执行服务器

大数据任务调度器 —— Azkaban 3.0 部署与简单应用

其中 MySQL 负责数据存储。

Web Server 负责 Azkaban 的管理,进行身份验证、调度程序和执行监视,提供 WEB 界面。

Executor Server 负责处理工作流和作业任务的实际执行。

Azkaban 的部署模式

Azkaban 3.0 版本之后,提供了两种模式:

  • 单机 solo-server 模式

  • 分布式多执行器模式

solo server 模式下,DB 是嵌入式 H2,web serverexecutor server 运行在同一个进程中,主要用于小规模的测试。

在分布式多执行器模式中,它的数据库应该由具有主从设置的 MySQL 实例支持,web serverexecutor server 运行在不同的主机上,这样升级和维护就不会影响用户,适用于生产环境。

Azkaban 搭建

Azkaban 搭建规划如下:

服务名称 hadoop104 hadoop105 hadoop106
MySQL
web server
executor server

在 Azkaban 中有三个安装包,如下所示:

大数据任务调度器 —— Azkaban 3.0 部署与简单应用

其中 azkaban-db 是用于初始化 MySQL 的脚本,azkaban-exec-serverexecutor server 执行服务器的安装包,azkaban-web-serverweb server WEB 服务器的安装包。

官网下载地址:Azkanban 官网下载

解压压缩包:

tar -zxvf azkaban-db-3.84.4.tar.gz -C /opt/module/azkaban/
tar -zxvf azkaban-exec-server-3.84.4.tar.gz -C /opt/module/azkaban/
tar -zxvf azkaban-web-server-3.84.4.tar.gz -C /opt/module/azkaban/

更换一个简单的名称:

cd /opt/module/azkaban/
mv azkaban-db-3.84.4/ db
mv azkaban-exec-server-3.84.4/ exec-server
mv azkaban-web-server-3.84.4/ web-server

大数据任务调度器 —— Azkaban 3.0 部署与简单应用

MySQL 配置

首先,我们需要先安装好 MySQL,可以参考我的这篇博客 —— Hive 搭建(将 MySQL 作为元数据库),其中提到了如何安装 MySQL。

安装完 MySQL 之后,我们需要对其进行一些配置。

# 进入 MySQL
mysql -uroot -pxxxxxx# 创建 Azkaban 的数据库
create database azkaban;# 创建 Azkaban 的用户,并设置密码
CREATE USER 'azkaban'@'%' IDENTIFIED BY '123456';# 赋予 Azkaban 用户权限
GRANT SELECT,INSERT,UPDATE,DELETE ON azkaban.*	to 'azkaban'@'%' WITH GRANT OPTION;# 切换到 Azkaban 数据库
use azkaban;# 运行 Azkaban 的初始化 SQL 脚本文件
source /opt/module/azkaban/db/create-all-sql-3.84.4.sql;# 验证
show tables;# 初始化后,创建的表如下所示:
+-----------------------------+
| Tables_in_azkaban           |
+-----------------------------+
| QRTZ_BLOB_TRIGGERS          |
| QRTZ_CALENDARS              |
| QRTZ_CRON_TRIGGERS          |
| QRTZ_FIRED_TRIGGERS         |
| QRTZ_JOB_DETAILS            |
| QRTZ_LOCKS                  |
| QRTZ_PAUSED_TRIGGER_GRPS    |
| QRTZ_SCHEDULER_STATE        |
| QRTZ_SIMPLE_TRIGGERS        |
| QRTZ_SIMPROP_TRIGGERS       |
| QRTZ_TRIGGERS               |
| active_executing_flows      |
| active_sla                  |
| execution_dependencies      |
| execution_flows             |
| execution_jobs              |
| execution_logs              |
| executor_events             |
| executors                   |
| project_events              |
| project_files               |
| project_flow_files          |
| project_flows               |
| project_permissions         |
| project_properties          |
| project_versions            |
| projects                    |
| properties                  |
| ramp                        |
| ramp_dependency             |
| ramp_exceptional_flow_items |
| ramp_exceptional_job_items  |
| ramp_items                  |
| triggers                    |
| validated_dependencies      |
+-----------------------------+

设置 MySQL 传输包大小。

编辑文件 vi /etc/my.cnf,在 [mysqld] 中添加如下参数:

max_allowed_packet=1024M

大数据任务调度器 —— Azkaban 3.0 部署与简单应用

MySQL 默认的传输包大小是 1MB,Azkaban 运行过程中会产生阻塞,故将该参数调大。

重启 MySQL,让参数生效。

systemctl restart mysqld
Executor server 部署
  1. 编辑配置文件
# 进入 Executor server 配置文件目录
cd /opt/module/azkaban/exec-server/conf# 编辑文件 azkaban.properties
vi azkaban.properties

大数据任务调度器 —— Azkaban 3.0 部署与简单应用

大数据任务调度器 —— Azkaban 3.0 部署与简单应用

修改完成后,保存并退出。

  1. 文件分发

将 Executor server 安装目录分发到集群其它机器上。

scp -r exec-server/ hadoop105:/opt/module/azkaban/
scp -r exec-server/ hadoop106:/opt/module/azkaban/
  1. 启动 Executor server 服务
# 分别进入主从机的 Executor server 目录
cd /opt/module/azkaban/exec-server# 启动 Executor server
bin/start-exec.sh# 停止 Executor server
bin/shutdown-exec.sh

大数据任务调度器 —— Azkaban 3.0 部署与简单应用

  1. 激活 Executor server 服务

启动完成后,Executor server 服务并没有运行,需要通过向其发送 GET 请求进行激活。

curl -G "hadoop104:12321/executor?action=activate" && echo
curl -G "hadoop105:12321/executor?action=activate" && echo
curl -G "hadoop106:12321/executor?action=activate" && echo

激活成功后,会出现提示:{“status”:“success”}

我们也可以直接在浏览器中访问网址进行激活,例如:hadoop104:12321/executor?action=activate

大数据任务调度器 —— Azkaban 3.0 部署与简单应用

激活完成后,我们可以进入 MySQL 中查询 azkaban.executors 表进行验证,状态为 1 表示已经激活,为 0 表示未激活。

大数据任务调度器 —— Azkaban 3.0 部署与简单应用

Executor server 服务部署完成。

Web server 部署
  1. 编辑配置文件
# 进入 Web server 配置文件目录
cd /opt/module/azkaban/web-server/conf# 编辑文件 azkaban.properties
vi azkaban.properties

大数据任务调度器 —— Azkaban 3.0 部署与简单应用

大数据任务调度器 —— Azkaban 3.0 部署与简单应用

修改完成后,保存并退出。

这里解释一下为什么要修改 Azkaban 的 executor 服务选举机制 azkaban.executorselector.filters

在 Azkaban 的分布式多执行器模式中,它会从以下三个方面来进行择优选举执行器来完成任务:

  • StaticRemainingFlowSize:当前执行器任务数量。

  • MinimumFreeMemory:当前执行器所剩的最小内存,默认是 6G。如果每个执行器所在的机器剩余内存都不足 6G ,则会导致任务无法执行。

  • CpuStatus:当前执行器的 CPU 剩余资源。

所以我这里删掉了 MinimumFreeMemory 参数,保证学习阶段的任务可以正常运行。

  1. 设置 Web server 的管理员用户
# 进入 Web server 配置文件目录
cd /opt/module/azkaban/web-server/conf# 编辑文件 azkaban-users.xml
vi azkaban-users.xml

添加一个管理员用户,账号密码随意,WEB 界面登录时使用。

  <user password="study" roles="admin" username="study"/>
  1. 启动 Web server 服务
# 进入主机的 Web server 目录
cd /opt/module/azkaban/web-server# 启动 Web server
bin/start-web.sh# 停止 Web server
bin/shutdown-web.sh

大数据任务调度器 —— Azkaban 3.0 部署与简单应用

我们可以访问 http://hadoop104:8081 (主机地址修改成自己的),进入 Azkaban 的 WEB 界面,输入账号密码进入系统。

大数据任务调度器 —— Azkaban 3.0 部署与简单应用

大数据任务调度器 —— Azkaban 3.0 部署与简单应用

Web server 服务部署完成。

Azkaban 环境搭建完成。

Azkaban 之 Hello World

在 Windows 中新建文件 azkaban.project,添加如下内容:

azkaban-flow-version: 2.0

新建文件 hello.flow,添加如下内容:

nodes:- name: demotype: commandconfig:command: echo "Hello World! Hello Azkaban!"

创建完成后,将这两个文件添加到压缩文件中。

大数据任务调度器 —— Azkaban 3.0 部署与简单应用

进入 Azkaban 的 WEB 系统界面,提交项目。

点击右上角 Create Project 创建项目。

大数据任务调度器 —— Azkaban 3.0 部署与简单应用

设置项目名称和描述,注意,都不能使用中文,否则无法创建。

大数据任务调度器 —— Azkaban 3.0 部署与简单应用

创建完项目后,点击 upload 上传项目压缩包。

大数据任务调度器 —— Azkaban 3.0 部署与简单应用

上传完成后,我们就可以对任务进行执行了,点击 Execute Flow 开始执行任务。

大数据任务调度器 —— Azkaban 3.0 部署与简单应用

点击 Execute 执行任务。

大数据任务调度器 —— Azkaban 3.0 部署与简单应用

提示已经成功将任务添加到了队列中,队列 id1,点击 Continue 继续。

大数据任务调度器 —— Azkaban 3.0 部署与简单应用

执行完成后,显示如下:

大数据任务调度器 —— Azkaban 3.0 部署与简单应用

图标颜色:

  • 绿色表示执行已经完成。

  • 蓝色表示任务正在执行。

  • 红色表示任务执行失败。

我们可以点击 Job List 查看该 Job 任务的执行情况以及日志。

大数据任务调度器 —— Azkaban 3.0 部署与简单应用

Azkaban 中的 Hello World 案例完成。

Azkaban 配置文件介绍与编写规则

在 Azkaban 中有两种编写配置文件的格式,一种是 properties,另一种是 flow 格式的。

其中 properties 格式的文件是键值对的形式,而 flow 是一种基于 yaml 格式的文件,现在更常用的是后者。

我们在 Azkaban 的 Hello World 案例中创建了如下两个文件:

文件 azkaban.project,内容如下:

azkaban-flow-version: 2.0

文件 hello.flow,内容如下:

nodes:- name: demotype: commandconfig:command: echo "Hello World! Hello Azkaban!"

其中文件 azkaban.project 中的内容是一个固定写法,告诉 Azkaban 用的是 flow 格式的配置文件。

然后文件 hello.flow 就是基于 yaml 格式编写的配置文件,我们现在来学习如何编写以及其语法。

yaml 基础语法如下:

  • 缩进时不允许使用 Tab 键,只允许使用空格

  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可;

  • 字符 # 标识注释,从这个字符一直到行尾,都会被解释器忽略;

在文件 hello.flow 中的 - 字符表示数组,nametyoeconfig 表示数组中的元素,我们将其转换为 JSON 格式后如下所示:

{"nodes": [{"name": "demo","type": "command","config": {"command": "echo \\"Hello World! Hello Azkaban!\\""}}]
}

这样是不是就能够容易理解许多。

一个 yaml 与 JSON 互相转换的网站:微工具

如果你想要学习更多关于 yaml 的语法内容,可以参考这篇博客 —— 最全 Yaml 语法详解