文章目录
Hadoop高手之路9-Azkaban工作流管理器
一、工作流概述
1. 工作流简介
一个完整的数据分析系统通常都由大量的工作任务单元组成,例如脚本shell程序、数据采集、数据处理MR、数据存储、java程序等,各任务单元之间存在时间先后及依赖关系,为了将这些复杂的执行计划组织起来,需要一个工作流调度系统来调度执行。
2. 常见的工作流调度工具
1) Azkaban
英文解释:
Azkaban is a batch workflow job scheduler created at LinkedIn to run Hadoop jobs. Azkaban resolves the ordering through job dependencies and provides an easy to use web user interface to maintain and track your workflows.
翻译一下:
Azkaban是一个在LinkedIn上创建的批处理工作流作业调度程序,用于运行Hadoop作业。Azkaban通过作业依赖性解决了排序问题,并提供了一个易于使用的web用户界面来维护和跟踪您的工作流程。
2) Oozie
Oozie 是一个开源的工作流和协作服务引擎,基于 Apache Hadoop 的数据处理任务。Oozie 是可扩展的、可伸缩的面向数据的服务,运行在 Hadoop 平台上。
Oozie 包括一个离线的 Hadoop 处理的工作流解决方案,以及一个查询处理 API。
二、Azkaban简介
1. Azkaban组成结构
Azkaban工作流管理器由三个核心部分组成,分别是Relational Database(关系型数据库MySQL)、AzkabanWebServer(Web服务器)、AzkabanExecutorServer(执行服务器)。三者关系具体如图所示。
2. Azkaban的部署模式
1) solo-server mode(独立服务器模式)
使用的数据库是内置的H2,而且web server和executor server都在统一进程中运行,通常用于小规模的测试阶段
2) two server mode(双服务器模式)
使用的数据库是主从设置的mysql,web server和executor server在不同的进程中,通常用于比较复杂的生产环境。
3) distributed multi-executor mode(分布式多执行器模式)
使用的数据库是主从设置的mysql,web server和executor server在不同的主机中,通常用于特别复杂的生产环境。
3.Azkaban特点
- Compatible with any version of Hadoop :兼容所有版本的 Hadoop。
- Easy to use web UI:基于Web的易用 UI。
- Simple web and http workflow uploads:简单的 Web 和 HTTP 工作流上传。
- Project workspaces:项目工作空间。
- Scheduling of workflows:工作流调度。
- Modular and pluginable:模块化和插件化。
- Authentication and Authorization:支持认证和授权。
- Tracking of user actions:可跟踪用户行为。
- Email alerts on failure and successes:失败和成功时的邮件提醒。
- SLA alerting and auto killing:SLA警告和自动终止。
- Retrying of failed jobs:失败作业的重试。
三、Azkaban的资源准备
1. 下载
两种下载方式
第一种:通用的github项目的下载方式,此处使用这种方式
GitHub - azkaban/azkaban: Azkaban workflow manager.
第二种:有选择性的下载自己需要的版本
Releases · azkaban/azkaban (github.com)
2. 上传
3. 解压
先安装unzip
解压
移动到/export/servers文件夹下
4. 目录介绍
5. 编译
小知识:jar包依赖管理方式有两种
- Maven:pom.xml指定某个jar包的坐标
- Gradle:build.gradle指定某个jar的坐标,更加简洁,是android开发常用的方式
azkaban是用Gradle方式来开发的,所以编译也要用Gradle
编译
./gradlew build -x test
出现错误,需要先安装git
小知识:版本和代码管理的工具主要有git和svn
安装git
继续进行编译,但是使用gradle国外镜像编译太慢了,几个小时也没成功,下面我们修改gradle为国内镜像。
6. 修改gradle为国内镜像
7.重新编译
用了一个半小时,终于编译成功了,可能是网速比较慢。
8. Azkaban安装包的获取
cd /export/servers/azkaban-master/azkaban-web-server/build/distributions
ll
cd /export/servers/azkaban-master/azkaban-exec-server/build/distributions
ll
cd /export/servers/azkaban-master/azkaban-db/build/distributions
ll
cd /export/servers/azkaban-master/azkaban-solo-server/build/distributions
ll
四、mysql的安装
1. 下载mysql安装yum源
查看CentOS版本
安装wget
wget https://repo.mysql.com//mysql57-community-release-el7-11.noarch.rpm
2. 安装yum源,并更新升级GPG
# 安装 i代表安装,v代表可视的,h代表进度
rpm -ivh mysql57-community-release-el7-11.noarch.rpm
# 不执行安装会出错
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-<当前年份>
# 安装mysql
yum install mysql-community-server
3. 启动mysql服务器
systemctl start mysqld.service
systemctl status mysqld
4. 获取临时密码
grep 'temporary password' /var/log/mysqld.log
5. 用临时密码登录mysql
mysql -uroot -p
6. 修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Bigdata20!';
其中‘new password’替换成你要设置的密码,注意:密码设置必须要大小写字母数字和特殊符号(,/';:等),不然不能配置成功
7. 远程连接mysql
提示错误,不允许远程连接
8. 添加允许远程连接的用户
GRANT ALL PRIVILEGES ON *.* TO '20bigdata'@'%' IDENTIFIED BY 'Bigdata2022!' WITH GRANT OPTION;
9. 重新编辑navicat连接属性
10. 重新远程连接
五、Azkaban的安装配置
1. mysql的安装配置
1) 创建azkaban的数据库及用户
2) azkaban数据库表初始化
use azkaban;
source /export/servers/azkaban-master/azkaban-db/build/distributions/azkaban-db-0.1.0-SNAPSHOT/create-all-sql-0.1.0-SNAPSHOT.sql
show tables;
2. Azkaban Web服务安装配置
1) 解压安装包
先创建azkaban目录
cd /export/servers/azkaban-master/azkaban-web-server/build/distributions/
tar zvxf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz -C /export/servers/azkaban
2) 配置web服务
修改azkaban-properties
修改azkaban-users.xml,可取默认
3. Azkaban Executor服务安装配置
1) 解压安装包
2) 配置
六、Azkaban的启动测试
1. 启动Azkaban Executor服务
1) 启动命令
2) 查看启动日志
3) 关闭Azkaban Executor服务
2. 启动Azkaban Web服务
1) 启动命令
2) 查看日志
提示没有激活的exector服务
再次查看进程
发现并没有启动web服务
3. 激活executor服务
查看exec服务端口号
执行激活命令
curl -G "hadoop001:37068/executor?action=activate"
说明:
- 必须在Azkaban Executor的根目录下执行该命令
- executor服务的端口号需要通过查看日志文件获取
4. 重新启动web服务
执行启动命令
查看启动日志
5. 通过web浏览器查看
输入用户名:azkaban,密码:azkaban,登录
七、Azkaban依赖任务调度管理
1.创建Job文件
先创建两个有依赖关系的job文件first.job和second.job
first.job
second.job
2. 把job文件打成ZIP格式的压缩包
3. 把打包后的文件下载到本地windows主机
4. 在web ui中创建一个任务调度项目
注意:创建项目时名称和描述都不能出现中文。
5. 上传任务压缩包
6.查看工作流详情
7. 任务立即执行或者调度执行
出现下面的界面:
点击立即执行
8.任务执行出现错误,需要修改web服务配置
修改commonprivate文件
9.重新启动exec和web服务,并重新执行调度任务
重启时需要激活exec
curl -G "hadoop001:45241/executor?action=activate"
10.查看执行结果
八、AzkabanHDFS任务调度管理
1.创建Job文件
2. 把job文件打成ZIP格式的压缩包并下载
3. 在webui上创建项目并上传压缩包
4.启动hadoop集群
5.启动执行
6.查看结果
九、AzkabanMapReduce任务调度管理
1.创建Job文件
# mr.job
type=command
command=hadoop jar hadoop-mapreduce-examples-3.1.4.jar wordcount hdfs://hadoop001:9000/input hdfs://hadoop001:9000/output/mrjobresult
2.与jar包一起打包成wordcount_mr压缩包
3. 在webui上创建项目并上传压缩包
4.打开Hadoop集群
5.启动执行
6.查看结果
这个需要等一会才运行完。
参考文章: