一、什么是Azkaban

        1.由Linkedln创建,用于运行Hadoop作业

        2.批处理工作流作业调度程序

        3.解决排序问题

        4.提供易于使用的Web用户界面来维护和跟踪工作流程

二、常见的工作流调度器

Crontab

        Linux系统自带,可以用来进行定时调度

Oozie

        管理Hdoop作业(job)的工作流程的重量级调度管理系统

Azkaban

        为了解决Hadoop的任务依赖关系问题的轻量级调度管理系统

Airflow

        一个可编程的工作流调度、监控平台

Azkaban和Oozie的区别

工作流定义

        Azkaban使用yaml(Azkaban 3.x版本)格式文件定义工作流

        Oozie使用XML文件定义工作流

定时执行

        Azkaban的定时执行任务是基于时间的

        Oozie的定时执行任务基于时间和输入数据

资源管理

        Azkaban有较严格的权限控制,如用户对工作流进行读/写/执行等操作

        Oozie暂无严格的权限控制

Azkaban特点

  1. 兼容任何版本的Hadoop
  2. 易于使用的web用户界面
  3. 简单的 web 和 http 工作流上传
  4. 项目工作区
  5. 工作流调度
  6. 模块化和可插拔的插件机制
  7. 认证和授权
  8. 跟踪用户操作
  9. 关于失败和成功的电子邮件警报
  10. SLA告警和自动查杀
  11. 重试失败的作业

三、Azkaban架构

hadoop可以实现脚本自动调度吗 hadoop任务调度工具_大数据

关系型数据库 (MySQL)

        Azkaban 使用 MySQL 来存储它的大部分状态

AzkabanWebServer

        AzkabanWebServer 是所有 Azkaban 的主要管理器

        处理项目管理、身份验证、调度程序和执行监控,Web 用户界面

AzkabanExecutorServer

        执行程序

四、Azkaban部署模式

solo-server mode

        DB 嵌入 H2,Web 服务器和执行器服务器运行在同一进程中

two-server mode

        数据库应该由设置了主从设置的 MySQL 实例支持

        Web 服务器和执行器服务器应该运行在不同的进程中

multiple executor mode

        它的数据库应该由设置了主从设置的 MySQL 实例支持

        Web 服务器和执行器服务器最好运行在不同的主机上

五、Azkaban安装

5.1 源码包下载

Azkaban官网地址:https://azkaban.github.io/

源码包下载地址:https://github.com/azkaban/azkaban/tags

5.2 源码包编译

5.2.1 编译前提

需要jdk1.8或更高版本

5.2.2 编译Azkaban

# 编译 Azkaban
./gradlew build

# 清理编译出来的文件
./gradlew clean

# 编译并发布
./gradlew installDist

# 运行测试用例
./gradlew test

# 不执行测试用例进行编译Azkaban【一般我们执行这一句就可以了,如果失败了,就多执行几次,直到成功为止】
./gradlew build -x test

5.3 solo模式安装

5.3.1 解压压缩包

mkdir /opt/install/azkaban
tar -zxvf /opt/software/azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz -C /opt/install/azkaban/
#更改文件夹名称
mv azkaban-solo-server-0.1.0-SNAPSHOT/ azkaban-solo-server

5.3.2 启动 AzkabanSingleServer服务

# 进入文件夹
cd /opt/install/azkaban/azkaban-solo-server/
# 启动
bin/start-solo.sh

5.3.3 查看进程

[root@singleNode azkaban-solo-server]# jps
440294 AzkabanSingleServer

5.3.4 关闭 AzkabanSingleServer服务

bin/shutdown-solo.sh

5.4 two-server安装

5.4.1 数据库准备

5.4.1.1 修改mysql配置文件

# 拷贝配置文件模板
cp /usr/share/mysql/my-small.cnf /etc/my.cnf.d/
# 修改配置文件
vim /etc/my.cnf.d/my-small.cnf
---------------------------------
[mysqld]
...
max_allowed_packet=1024M
---------------------------------

# 重启mysql来让配置生效
systemctl restart mysql

5.4.1.2 建表

-- 创建数据库
CREATE DATABASE azkaban;

-- 创建用户,用户名和密码都是azkaban
mysql> CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban';
--赋予用户名为azkaban增删改查权限
-- give the user INSERT, SELECT, UPDATE, DELETE permission on all tables in the Azkaban db.
mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON azkaban.* to 'azkaban'@'%' WITH GRANT OPTION;

-- 刷新权限
mysql> flush privileges;

-- 切换数据库
mysql> use azkaban;

-- 创建Azkaban表
mysql> source /opt/install/azkaban/azkaban-db/create-all-sql-0.1.0-SNAPSHOT.sql;

5.4.2 安装Executor Server

5.4.2.1 解压压缩包

tar zxvf /opt/software/azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz -C /opt/install/azkaban/
#修改文件夹名称
cd /opt/install/azkaban/
mv azkaban-exec-server-0.1.0-SNAPSHOT/ azkaban-exec

5.4.2.2 修改配置

cd azkaban-exec/

# 配置mysql信息
vi conf/azkaban.properties
---------------------------------
mysql.port=3306
mysql.host=singleNode
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100
---------------------------------

5.4.2.3 启动 AzkabanExecutorServer服务

bin/start-exec.sh

5.4.2.4 查看进程

[root@singleNode azkaban-exec]# jps
3221 RunJar
443678 AzkabanExecutorServer

5.4.2.5 激活executor

curl -G "localhost:$(<./executor.port)/executor?action=activate" && echo

-------------------------------------------------------------------------
{"status":"success"}

5.5 安装Web Server

5.5.1 解压压缩包

tar -zxvf /opt/software/azkaban-web-server-0.1.0-SNAPSHOT.tar.gz -C /opt/install/azkaban/
#修改文件夹名称
cd /opt/install/azkaban/
mv azkaban-web-server-0.1.0-SNAPSHOT/ azkaban-web

5.5.2 修改配置

cd azkaban-web/

# 配置mysql信息
vim conf/azkaban.properties
---------------------------------
mysql.port=3306
mysql.host=singleNode
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100
---------------------------------

# 配置用户信息
vim conf/azkaban-users.xml
---------------------------------
<azkaban-users>
  <user groups="azkaban" password="azkaban" roles="admin" username="azkaban"/>
  <user password="metrics" roles="metrics" username="metrics"/>
  <user password="admin" roles="admin" username="admin"/>

  <role name="admin" permissions="ADMIN"/>
  <role name="metrics" permissions="METRICS"/>
</azkaban-users>
---------------------------------

5.5.3 启动

bin/start-web.sh

5.5.4 查看进程

[root@singleNode azkaban-web]# jps
2514 RunJar
444293 AzkabanWebServer
443678 AzkabanExecutorServer
444331 Jps

5.5.5 访问Web UI

hadoop可以实现脚本自动调度吗 hadoop任务调度工具_hadoop可以实现脚本自动调度吗_02