1 azkaban介绍
Azkaban是一个开源的工作流程调度系统,专为在Hadoop生态系统中批量工作和作业管理而设计。由LinkedIn开发并贡献给开源社区,Azkaban解决了在大数据处理中对作业流程管理和协调的需求。它的主要目标是以简单且高效的方式提供时间和依赖性管理。
Azkaban作为一个专注于批量数据处理和工作流管理的系统,其简单性、灵活性和可靠性使其在大数据领域广受欢迎。它解决了大规模数据处理工作流程管理的复杂性,使得任务调度和依赖管理变得更加高效。随着大数据技术的不断发展,Azkaban将继续发挥其在数据处理和工作流管理中的重要作用。
1.1 核心特性
-
工作流管理: Azkaban允许用户定义工作流(workflows),每个工作流由多个作业(jobs)组成,这些作业可以配置为遵循特定的执行顺序。
-
依赖性调度: 支持基于依赖关系的作业调度。只有当一个作业的所有依赖项都完成时,该作业才会启动。
-
易于使用的Web界面: 提供了一个用户友好的Web界面,用于创建、运行和监控工作流。
-
项目管理: Azkaban允许用户将作业和工作流组织成项目(projects),并对项目进行管理。
-
插件式架构: 支持插件式架构,允许扩展和定制功能。
-
认证和授权: 提供了基本的安全特性,包括用户认证和基于角色的访问控制。
-
执行历史和日志: 记录工作流和作业的执行历史,包括日志文件,方便故障排查和性能分析。
1.2 架构和组件
-
Azkaban Web服务器: 作为系统的前端,处理用户界面和API请求,同时也是工作流程管理的中心。
-
Azkaban执行器服务器: 负责执行工作流中的作业。在大型部署中,可以有多个执行器实例。
-
数据库: 用于存储项目配置、用户数据、工作流定义和历史记录。
-
Azkaban项目: 是工作流和作业的集合,可以包含配置文件和资源文件。
1.3 使用Azkaban
-
定义工作流: 用户可以使用简单的JSON或YAML文件定义工作流和作业配置。
-
上传和管理项目: 通过Web界面上传项目文件,管理工作流和作业。
-
调度和运行工作流: 设置工作流的调度计划或手动触发工作流的执行。
-
监控和日志查看: 使用Web界面监控正在运行和历史的工作流,查看作业的日志。
1.4 性能优化
-
水平扩展: 可以通过增加更多的执行器服务器来水平扩展Azkaban,提高处理能力。
-
资源管理: 对作业的资源使用进行优化,如调整内存和CPU使用。
-
失败和重试策略: 配置作业失败后的重试策略,提高系统的健壮性。
1.5 安全性和管理
-
用户认证: 支持用户登录认证,保护工作流和数据的安全。
-
基于角色的访问控制: 提供角色基于的访问控制,不同角色的用户有不同的操作权限。
-
SSL/TLS支持: 支持通过SSL/TLS加密Web界面和API通信。
1.6 社区和生态系统
-
开源社区: Azkaban拥有一个活跃的开源社区,不断提供新的特性和改进。
-
与Hadoop生态系统集成: 设计用于Hadoop生态系统,与Hadoop、Hive、Pig、Spark等工具和平台集成。
-
插件和扩展: 社区提供了多种插件和扩展,增强了Azkaban的功能。
2 azkaban安装
2.1 下载源码
地址:https://github.com/azkaban/azkaban
2.2 通过IDEA编译源码
编译源码
2.3 创建数据库
(1)在10.211.55.6服务器上创建数据库azkaban
mysql> CREATE DATABASE azkaban;
(2)授权用户访问
mysql> CREATE USER 'root'@'%' IDENTIFIED BY '123456';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON azkaban.* to 'root'@'%' WITH GRANT OPTION;
,并重启mysql
vi /etc/my.cnf
max_allowed_packet=1024M
(4)执行sql文件创建数据库表
sql路径:azkaban-3.23.0/azkaban-db/build/sql/create-all-sql-0.1.0-SNAPSHOT.sql
2.4 安装azkaban-web-server
(1)将azkaban-3.23.0/azkaban-web-server/build/distributions/azkaban-web-server-0.1.0-SNAPSHOT.tar.gz解压缩,并拷贝到安装服务器
(2)解压缩后只有三个目录:bin,lib,web
(3)手动增加以下几个目录:conf,extlib,plugins,azkaban,logs
(4)将azkaban-3.23.0/azkaban-solo-server/build/resources/main/conf下的三个文件拷贝到刚创建conf目录中
将azkaban-3.23.0/azkaban-solo-server/build/resources/main/log4j.properties文件拷贝到刚创建的conf目录中
将azkaban-3.23.0/azkaban-web-server/src/main/resources/azkaban/下的所有文件拷贝到azkaban目录中,目录结构保持原样不变
(5)生成证书
由于azkaban需要https连接,需要生成证书,在工程目录(bin的上级目录)命令执行
keytool -keystore keystore -alias jetty -genkey-keyalg RSA
密码设置为:123456
(6)配置conf目录下azkaban.properties
#Azkaban Personalization Settings
azkaban.name=Test
azkaban.label=My Local Azkaban
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
web.resource.dir=web/
#时区
default.timezone.id=Asia/Shanghai
#Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
#平台登录用户名密码
user.manager.xml.file=conf/azkaban-users.xml
#Loader for projects
executor.global.properties=conf/global.properties
azkaban.project.dir=projects
# mysql
database.type=mysql
mysql.port=3306
mysql.host=10.211.55.6
mysql.database=azkaban
mysql.user=root
mysql.password=123456
mysql.numconnections=100
# Velocity dev mode
velocity.dev.mode=false
# jetty和证书
jetty.maxThreads=25
jetty.ssl.port=8443
jetty.port=8081
jetty.keystore=keystore
jetty.password=123456
jetty.keypassword=123456
jetty.truststore=keystore
jetty.trustpassword=123456
# 多执行器配置
azkaban.use.multiple.executors=true
azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus
azkaban.executorselector.comparator.NumberOfAssignedFlowComparator=1
2.5 安装executor
(1)将azkaban-3.23.0/azkaban-exec-server/build/distributions/azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz解压,并拷贝到安装服务器
(2)解压后只有两个目录:bin, lib
(3)手动增加以下目录:extlib, plugins/jobtypes, conf
(4)将azkaban-3.23.0/azkaban-solo-server/build/resources/main/conf下的三个文件拷贝到刚创建conf目录中
将azkaban-3.23.0/azkaban-solo-server/build/resources/main/log4j.properties文件拷贝到刚创建的conf目录中
将azkaban-3.23.0/azkaban-solo-server/src/main/resources/commonprivate.properties文件考本到刚创建的plugins/jobtypes目录中
(5)配置conf目录下的azkaban.properties文件
#Azkaban 时区
default.timezone.id=Asia/Shanghai
# Azkaban JobTypes Plugins(插件)
azkaban.jobtype.plugin.dir=plugins/jobtypes
#Loader for projects
executor.global.properties=conf/global.properties
#执行器会把数据库中的文件下载到此目录
azkaban.project.dir=projects
#数据库配置
database.type=mysql
mysql.port=3306
mysql.host=10.211.55.6
mysql.database=azkaban
mysql.user=root
mysql.password=123456
mysql.numconnections=100
# Azkaban Executor settings
executor.maxThreads=50
# 默认端口
executor.port=12321
executor.flow.threads=30
(6)修改commonprivate.properties文件,
# 默认是true,表示特定用户执行任务
execute.as.user=false
2.6 数据库中插入executor节点
insert into executors(host,port,active) values(“10.211.55.6",12321,1);
insert into executors(host,port,active) values(“10.211.55.7",12321,1);
insert into executors(host,port,active) values(“10.211.55.8",12321,1);
2.7 启动azkaban
(先执行executor,再执行web,否则web工程会因为找不到执行器启动失败)
(1)首先启动executor
进入azkaban-3.23.0/azkaban-exec-server
sh bin/start-exec.sh
查看logs下的日志文件是否有错误,无错误则启动成功
(2)首先启动web
进入azkaban-3.23.0/azkaban-web-server
sh bin/start-exec.sh
查看logs下的日志文件是否有错误,无错误则启动成功
(3)通过:https://10.211.55.6:8443访问azkaban