一、简介
Azkaban是在LinkedIn上创建的用于运行Hadoop作业的批处理工作流作业调度程序。Azkaban通过作业依赖性解决订购问题,并提供易于使用的Web用户界面来维护和跟踪您的工作流程。
在3.0版之后,提供了两种模式:独立的“单服务器”模式和分布式多执行器模式。下面介绍两种模式之间的区别。
在单独服务器模式下,数据库是嵌入式H2,并且Web服务器和执行程序服务器都在同一进程中运行。如果只想尝试一下,这将很有用。它也可以用于小规模的用例。
多重执行器模式适用于最严重的生产环境。它的数据库应由设置了主从关系的MySQL实例支持。理想情况下,Web服务器和执行程序服务器应在不同的主机中运行,以便升级和维护不会影响用户。这种多主机设置为Azkaban带来了强大且可扩展的方面。
特征
- 与任何版本的Hadoop兼容
- 易于使用的Web UI
- 简单的Web和HTTP工作流程上传
- 项目工作区
- 安排工作流程
- 模块化且可插入
- 认证与授权
- 跟踪用户动作
- 通过电子邮件通知失败和成功
- SLA警报和自动终止
- 重试失败的作业
Azkaban架构
Azkaban三个关键组件的作用
Relational Database:存储元数据,如项目名称、项目描述、项目权限、任务状态、SLA规则等。
AzkabanWebServer:项目管理、权限授权、任务调度、监控executor。
AzkabanExecutorServer:作业流执行的Server。
Azkaban三种部署模式
solo-server模式
DB使用的是一个内嵌的H2,Web Server和Executor Server运行在同一个进程里。这种模式包含Azkaban的所有特性,但一般用来学习和测试。
two-server模式
DB使用的是MySQL,MySQL支持master-slave架构,Web Server和Executor Server运行在不同的进程中。
分布式multiple-executor模式
DB使用的是MySQL,MySQL支持master-slave架构,Web Server和Executor Server运行在不同机器上,且有多个Executor Server。
二、安装部署
-
安装前准备
依赖环境:jdk1.8以上(请提前配置好)
MySQL安装:请参考:https://www.cnblogs.com/guduershi/p/12017008.html
MySQL首次登录注意事项:
如果初始密码无法正确获取,则配置免密登入(更改密码后记得把此配置去除)
变更密码
下载
-
- Azkaban框架的来源:https://github.com/azkaban/azkaban
- Azkaban插件:https : //github.com/azkaban/azkaban-plugins
- Azkaban文档:https : //github.com/azkaban/azkaban.github.io
- Azkaban下载:https : //github.com/azkaban/azkaban/releases
编译
#解压源码包
tar -zxvf azkaban-3.73.1.tar.gz
#跳转到解压目录
cd azkaban-3.73.1
#修改build.gradle解决Gradle和Maven下载jar包慢的问题参考:https://blog.csdn.net/nklinsirui/article/details/82056172
vi build.gradle
#编译压缩为tar包
./gradlew distTar
编译后生成的安装包路径
#solo-server模式安装包路径
[root@hadoop1 azkaban-3.73.1]# ls azkaban-solo-server/build/distributions/
#two-server模式和multiple-executor模式web-server安装包路径
[root@hadoop1 azkaban-3.73.1]# ls azkaban-web-server/build/distributions/
#two-server模式和multiple-executor模式exec-server安装包路径
[root@hadoop1 azkaban-3.73.1]# ls azkaban-exec-server/build/distributions/
#two-server模式和multiple-executor模式建库SQL语句路径
[root@hadoop1 azkaban-3.73.1]# ls azkaban-db/build/distributions/
-
solo-server模式部署
//TODO
-
two-server模式部署
1、解压azkaban-db-0.1.0-SNAPSHOT.tar.gz 、azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz 、
azkaban-web-server-0.1.0-SNAPSHOT.tar.gz到指定安装目录
2、重命名azkaban-exec-server-0.1.0-SNAPSHOT为executor,
azkaban-web-server-0.1.0-SNAPSHOT为server(个人意愿)
3、进入mysql创建azkaban数据库
3.1创建azkaban数据库
3.2执行sql脚本create-all-sql-0.1.0-SNAPSHOT.sql
设置conf参数
exec-server的如下:只需把下面host和user和password修改即可 (exec-server/conf/azkaban.properties)
# Azkaban Personalization Settings azkaban.name=Test azkaban.label=My Local Azkaban azkaban.color=#FF3601 azkaban.default.servlet.path=/index #web的路径变为绝对路径 web.resource.dir=/soft/azkaban/azkaban-web-server/web/ #时间改为亚洲上海 default.timezone.id=Asia/Shanghai # Azkaban UserManager class user.manager.class=azkaban.user.XmlUserManager #user.manager.xml改为绝对路径 user.manager.xml.file=/soft/azkaban/azkaban-web-server/conf/azkaban-users.xml # Loader for projects改为绝对路径 executor.global.properties=/soft/azkaban/azkaban-exec-server/conf/global.properties azkaban.project.dir=projects # Velocity dev mode velocity.dev.mode=false # Azkaban Jetty server properties. jetty.use.ssl=false jetty.maxThreads=25 jetty.port=8081 # Where the Azkaban web server is located azkaban.webserver.url=http://localhost:8081 # mail settings mail.sender= mail.host= # User facing web server configurations used to construct the user facing server URLs. They are useful when there is a reverse proxy between Azkaban web servers and users. # enduser -> myazkabanhost:443 -> proxy -> localhost:8081 # when this parameters set then these parameters are used to generate email links. # if these parameters are not set then jetty.hostname, and jetty.port(if ssl configured jetty.ssl.port) are used. # azkaban.webserver.external_hostname=myazkabanhost.com # azkaban.webserver.external_ssl_port=443 # azkaban.webserver.external_port=8081 job.failure.email= job.success.email= lockdown.create.projects=false cache.directory=cache # JMX stats jetty.connector.stats=true executor.connector.stats=true # Azkaban plugin settings改为绝对路径 azkaban.jobtype.plugin.dir=/soft/azkaban/azkaban-exec-server/plugins/jobtypes # Azkaban mysql settings by default. Users should configure their own username and password. database.type=mysql mysql.port=3306 mysql.host=mysql的的主机host mysql.database=azkaban mysql.user=账号名称 mysql.password=账号密码 mysql.numconnections=100 # Azkaban Executor settings executor.maxThreads=50 executor.flow.threads=30
web-server的如下:同样只需把下面host和user和password修改即可(web-server/conf/azkaban.properties)
# Azkaban Personalization Settings azkaban.name=Test azkaban.label=My Local Azkaban azkaban.color=#FF3601 azkaban.default.servlet.path=/index #web的路径变为绝对路径 web.resource.dir=/soft/azkaban/azkaban-web-server/web/ #时间改为亚洲上海 default.timezone.id=Asia/Shanghai # Azkaban UserManager class user.manager.class=azkaban.user.XmlUserManager #填写的是user.manager.xml的绝对路径 user.manager.xml.file=/soft/azkaban/azkaban-web-server/conf/azkaban-users.xml # Loader for projects添的是exec的global的绝对路径哦 executor.global.properties=/soft/azkaban/azkaban-exec-server/conf/global.properties azkaban.project.dir=projects # Velocity dev mode velocity.dev.mode=false # Azkaban Jetty server properties. jetty.use.ssl=false jetty.maxThreads=25 jetty.port=8081 # Azkaban Executor settings # mail settings mail.sender= mail.host= # User facing web server configurations used to construct the user facing server URLs. They are useful when there is a reverse proxy between Azkaban web servers and users. # enduser -> myazkabanhost:443 -> proxy -> localhost:8081 # when this parameters set then these parameters are used to generate email links. # if these parameters are not set then jetty.hostname, and jetty.port(if ssl configured jetty.ssl.port) are used. # azkaban.webserver.external_hostname=myazkabanhost.com # azkaban.webserver.external_ssl_port=443 # azkaban.webserver.external_port=8081 job.failure.email= job.success.email= lockdown.create.projects=false cache.directory=cache # JMX stats jetty.connector.stats=true executor.connector.stats=true # Azkaban mysql settings by default. Users should configure their own username and password. database.type=mysql mysql.port=3306 mysql.host=mysql的host mysql.database=azkaban mysql.user=用户账号 mysql.password=用户密码 mysql.numconnections=100 #Multiple Executor azkaban.use.multiple.executors=true #注意如果你的剩余内存不足6g必须把下面的 MinimumFreeMemory, 删除。不然会出错 azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus azkaban.executorselector.comparator.NumberOfAssignedFlowComparator=1 azkaban.executorselector.comparator.Memory=1 azkaban.executorselector.comparator.LastDispatched=1 azkaban.executorselector.comparator.CpuUsage=1
该web是可以用ssl,但是对于我们初学者没必要,麻烦~
添加账号
我们只需要在/azkaban-web-server/conf/azkaban-users.xml文件里添加即可。
假设我添加了一个snow账号密码为snow并有admin权限。只需如下修改即可
<azkaban-users>
<user groups="azkaban" password="azkaban" roles="admin" username="azkaban"/>
<user password="metrics" roles="metrics" username="metrics"/>
<user password="snow" roles="admin" username="snow"/>
<role name="admin" permissions="ADMIN"/>
<role name="metrics" permissions="METRICS"/>
</azkaban-users>
启动Azkaban
启动顺序:首先启动exec的再启动web的。一定要按这样的顺序,不然一定无法运行
启动exec-server:
cd /soft/azkaban/azkaban-exec-server/
手动修改exec-srver状态为激活。
这步很重要,不然后面web端会一直起不来,他会报错说execute没有available的,然后就停了。很蛋疼但是没办法。端口号在executor下的executor.port文件中可查
具体命令为curl http://${executorHost}:${executorPort}/executor?action=activate
启动web-server
cd /soft/azkaban/azkaban-web-server/
./bin/start-web.sh