文章目录
Azkaban 部署模式
Azkaban 3.x 版本中, Azkaban提供了3种部署模式,:轻量级 solo server mode(独立服务器模式)、重量级的 two server mode(双服务器模式)和 distributed multiple-executor mode(分布式多执行器模式)。
部署模式 | 说明 |
---|---|
solo server mode | 在独立服务器模式下,使用数据库是内嵌的 H2,并且 Web Server(Web 服务器)和 Executor Server(执行服务器)都在同一进程中运行。如果只想尝试一下 Azkaban 的使用,或者是很小规模的测试使用,这种部署模式还是可行的。 |
two server mode | 双服务模式适用于比较复杂的生产环境,它的数据库会由具有主从设置的 MySQL 实例提供支持。其中,Web 服务器和执行服务器应在不同的进程中运行,以便升级和维护过程中不影响用户。 |
distributed multiple-executor mode | 分布式多执行器模式适用于特别复杂的生产环境,它的数据库同样应该由具有主从设置的 MySQL 实例支持。理想情况下,Web 服务器和执行服务器应在不同的主机中运行,以便升级和维护不影响用户。 |
双服务器模式部署(two server mode)
1.下载 Azkaban 源文件
azkanban3.50.0 源码包下载地址(github)
CentOS 7
JDK 1.8
2.Azkaban 源文件编译
将下载后的 Azkaban 源文件压缩打包 azkaban-3.50.0.tar.gz 上传至 master 主机上,并且解压到指定目录:
tar -zxvf azkaban-3.50.0.tar.gz /usr/azkaban
执行上述命令后,进入解压后的 azkaban-3.50.0 文件夹目录下,接着直接使用如下命令对 Azkaban 源文件进行编译(注意,编译过程中可能需要 Git 工具下载相关官文件,CentOS需要使用yum仓库下载 Git)
yum -y install git
# 在azkaban-3.50.0 文件夹目录下执行如下命令对源文件进行编译
./gradlew build -x test
注意:在编译源文件的过程中,可能会发生编译中端等现象,大多原因是因为网络问题,如果网慢可能会导致编译好几个小时的情况,总之如果中端,就多执行几次上述命令,一直到编译成功,如下图演示,当然下图显示9s是多次执行命令的结果。
编译成功后会在解压目录下出现三个新的目录,如下图:
3.Azkaban 安装包获取
Azkaban 源文件编译成功后,会在解压目录下各自 azkaban-*/build/distributions 目录下生成基于 Windows 和 Linux 的安装包文件。如下图所示:
后续的 Azkaban 安装配置过程中,只需要解压上述目录中的安装包即可。
Azkaban 安装配置
在准备好 Azkaban 安装包后,就可以正式进行 Azkaban 的安装配置了。接下来,为了后续安装后的 Azkaban 方便调用 Hive,下面在 Master 主节点下进行配置。
1.MySQL 安装配置(数据库服务)
在前面介绍 Azkaban 的部署模式时,已经讲解了双服务器模式更推荐使用 MySQL 作为元数据的储存库,所以安装 Azkaban 的第一步必须安装好 MySQL 数据库。
可参考这篇文章第一章节来安装 MySQL:
构建数据仓库Hive(基于centos7系统)
(1)创建 Azkaban 数据库及用户
首先在 master 主机上进入数据库,并且创建 azkaban数据库
mysql -uroot -p
mysql>CREATE DATABASE azkaban;
创建 azkaban 数据库成功后,还可以为该数据库专门创建和分配具有执行权限的新用户,或者使用 root 用户进行操作。
由于在默认配置下,MySQL 会根据配置文件限制接收数据包的大小,则可通过配置属性 max_allowed_packet,将允许数据包大小设置为更高的值,如 1024MB。进入 /etc/my.cnf 文件进行编辑
配置过后必须重新启动 MySQL 服务。
systemctl restart mysqld
(2)Azkaban 数据库表初始化
进入到 /usr/azkaban/azkaban-3.50.0/azkaban-db/build/distributions 目录下先对编译生成的 azkaban-db-0.1.0-SNAPSHOT.tar.gz 文件进行解压。
tar -zxvf azkaban-db-0.1.0-SNAPSHOT.tar.gz
然后进入解压后的目录,找到我们需要的 sql 脚本
之后直接进入到 azkaban数据库,执行数据库初始化脚本文件,如下:
source /usr/azkaban/azkaban-3.50.0/azkaban-db/build/distributions/azkaban-db-0.1.0-SNAPSHOT/create-all-sql-0.1.0-SNAPSHOT.sql
执行之后会生成很多表文件,这些表的创建就是对 Azkaban 进行了初始化:
2.Azkaban Web 服务安装配置(Web 服务)
完成 Azkaban 依赖的 MySQL 元数据库的安装和初始化之后,就可以进入双服务的安装阶段了,这里先以安装 Azkaban Web 服务为例进行说明。
(1)SSL 创建
Azkaban 使用 SSL 套接字连接器,这意味着必须提供密匙库。
首先在 master 主机上的某个目录执行如下命令,生成 SSL 密匙库。
keytool -keystore keystore -alias jetty -genkey -keyalg RSA
密匙口令,输入123456,接下来一路回车,然后在是否正确地方填写 Y ,之后同样输入 123456 。
执行完毕之后就会在当前目录下生成一个 keystore 密匙文件。
如下图:
(2)Azkaban Web 服务器安装配置
将前面章节编译好的 Web 服务器安装包进行解压到 /usr/azkaban 目录下
tar -zxvf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz -C /usr/azkaban/
执行命令后会在 /usr/azkaban/azkaban-web-server-0.1.0-SNAPSHOT 目录下产生三个文件夹,如下图,而实际情况,Azkaban 服务需要多个文件,具体如下表:
文件名 | 说明 |
---|---|
bin | 启动 Azkaban jetty 服务器的脚本 |
conf | Azkaban 服务器的配置 |
lib | Azkaban 依赖的 jar 包 |
extlib | 添加到 extlib 的其他 jar 将添加到 Azkaban 的类路径当中 |
plugins | 可以安装插件的目录 |
web | Azkaban Web 服务器的 Web(css,javascript,images)文件 |
如上图,在 Azkaban Web 服务器的安装目录下还缺少 conf、extlib 和 plugins 3个文件(Azkaban 官方提供的有些版本存在这些文件),其中 conf 和 plugins 这俩个文件可以从编译的 azkaban-solo-server 文件包(位于解压安装的主目录)下进行解压复制,而 extlib 是一个空文件夹,可以自行创建。
cp -r conf/ /usr/azkaban/azkaban-web-server-0.1.0-SNAPSHOT/
cp -r plugins/ /usr/azkaban/azkaban-web-server-0.1.0-SNAPSHOT/
接着打开 conf 目录下的 azkaban.properties 配置文件,针对该模板文件中的时区、MySQL 和 jetty 进行修改,内容如下:
# 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
# 对数据库类型和配置进行修改编辑
database.type=mysql
mysql.port=3306
mysql.host=localhost
mysql.database=azkaban
mysql.user=root
mysql.password=123456
mysql.numconnections=100
h2.path=./h2
h2.create.tables=true
# Velocity dev mode
velocity.dev.mode=false
# Azkaban Jetty server properties.
# 对 jetty 服务配置进行修改编辑
jetty.use.ssl=true
jetty.maxThreads=25
jetty.port=8081
jetty.ssl.port=8443
jetty.keystore=keystore
jetty.password=123456
jetty.keypassword=123456
jetty.truststore=keystore
jetty.trustpassword=123456
# Azkaban Executor settings
executor.port=12321
# 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=plugins/jobtypes
注意这里修改过的地方都用汉字进行标注了。
在 azkaban.properties 配置文件中,主要针对 Azkaban Web 服务器的时区、MySQL 和 jetty 服务进行了修改配置。其中 default.timezone.id=Asia/Shanghai 要求默认时区设置成 亚洲/上海 ; MySQL配置中,database.type=mysql 要求数据库类型为 mysql(默认为 H2),还根据实际情况配置了数据库地址、名称、用户名、密码等信息;jetty 服务配置中,jetty.use.ssl=true 表示启用了 SSL 链接,同时根据实际 SSL 安装情况配置了 jetty 相关的端口号、密码等信息。另外,在上述文件属性配置时,后缀不能有任何多余空格或者字符,否则服务启动失败!
注意事项:
为了保证 Azkaban Web 服务器配置文件 azkaban.properties 能够找到前面生成的 keystore,还需要将生成的 keystore 密钥文件移动到当前解压后的 Azkaban Web 服务根目录下(本人上文中将密钥文件放在了 /root 目录下,Azkaban Web 的根目录在 /usr/azkaban/azkaban-web-server-0.1.0-SNAPSHOT )
cp /root/keystore /usr/azkaban/azkaban-web-server-0.1.0-SNAPSHOT/
完成 Azkaban Web 服务器核心文件 azkaban.properties 的配置后,还可以打开 conf 目录下的 azkaban-user.xml 用户配置文件,为 Azkaban Web 服务器添加或者修改管理用户,具体如下:
<azkaban-users>
<user groups="azkaban" password="azkaban" roles="admin" username="azkaban"/>
<user password="metrics" roles="metrics" username="metrics"/>
<user password="admin" roles="metrics,admin" username="admin"/>.
<role name="admin" permissions="ADMIN"/>
<role name="metrics" permissions="METRICS"/>
</azkaban-users>
在 azkaban.properties 文件中,默认为 Azkaban Web 服务器配置了一些具有权限的用户,添加的内容表示自定义添加可一个用户名和密码均为 admin 的用户,并且为该用户设置了 “metrics,admin” 所有权限,后续将会使用该用户j进行登陆和管理 Azkaban 服务。
加入这一行内容即可。
最后,在启动 Azkaban Web 服务和 Azkaban Executor 服务的时候,都依赖 conf 目录下的 log4j.properties 日志文件用于日志输出,所以还需要在这俩个服务的 conf 目录下编写配置 log4j.properties 日志文件,内容如下:
log4j.rootLogger=INFO,Console
log4j.logger.azkaban=INFO,server
log4j.appender.server=org.apache.log4j.RollingFileAppender
log4j.appender.server.layout=org.apache.log4j.PatternLayout
log4j.appender.server.File=logs/azkaban-server.log
log4j.appender.server.layout.ConversionPattern= \
%d{yyyy/MM/dd HH:mm:ss.SSS Z} %p [%c{1}] [Azkaban] %m%n
log4j.appender.server.MaxFileSize=102400MB
log4j.appender.server.MaxBackupIndex=2
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern= \
%d{yyyy/MM/dd HH:mm:ss.SSS Z} %p [%c{1}] [Azkaban] %m%n
在上述文件当中,通过 log4j.appender.server.File=logs/azkaban-server.log 将服务启动日志文件的存放路径配置在了对应服务解压目录下的 azkaban-server.log 文件中(服务器启动会自动创建目录文件)。
注意:使用 Azkaban 不同版本进行编译后生成的文件下,并没有统一类似 bin、web、lib、conf、extlib 和 plugins 文件夹,这个需要根据不同版本实际情况进行添加,并对 conf 目录下文件进行配置。
3.Azkaban Executor 服务安装配置(执行器服务)
Azkaban Web 服务器的安装配置后,还需要对 Azkaban Executor 服务器进行安装配置,其整个安装配置过程与 Azkaban Web 服务器的暗转配置类似,步骤如下。
先将之前编译好的 Executor 服务安装包进行解压到 /usr/azkaban 目录下
tar -zxvf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz -C /usr/azkaban/
执行上述命令后会在 /usr/azkaban/azkaban-exec-server-0.1.0-SNAPSHOT 目录下产生 bin目录和 lib目录文件,同 Web 服务安装包一样,还缺少了 conf、extlib、plugins 3个文件目录 (exec 执行器服务不需要 web 文件夹),这里只需要从前面配置好的 Azkaban Web 服务器的安装文件下进行复制即可。如下图所示:
之后只需要修改当前服务的 conf 目录下的 azkaban.properties 文件,移除 jetty 服务配置,同时在该文件中对 Executor 进行编辑设置,主要修改内容如下:
将这段内容添加到末尾:
# Azkaban Executor settings
# 设置最大线程数
executor.maxThreads=50
# 设置Executor端口
executor.port=12321
# 设置流动线程数
executor.flow.threads=30
至此,整个 Azkaban 工作流管理器的安装配置就完成了。
需要说明的是,由于版本的不同,Azkaban 的配置方式和结果可能略有不同,但必须要根据使用的 Azkaban 版本为准,并且在后续部署后能够正确访问。
Azkaban 启动测试
1.启动 Azkaban Executor 服务
在 Azkaban Executor 的解压目录下执行如下命令:
bin/start-exec.sh
执行上述命令后启动 Azkaban Executor 服务,此时可以通过 ll 命令查看当前目录下的文件内容,也或者通过 jps 命令产看进程。
2.启动 Azkaban Web 服务
与 Executor 服务一样,在解压目录下,执行如下命令:
bin/start-web.sh
同样的方式查看服务启动状态。
而且二者关闭服务的时候也是在 bin 目录下有 shutdown-exec.sh 命令
3.访问 Azkaban UI
SSL | 地址 |
---|---|
禁用 | http: //master:8081 |
启用 | https: //master:8443 |
8081 就是 azkaban.properties 中默认指定配置的 jetty.port=8081。前面配置中,启用了 SSL ,而且配置的 端口是 8443 。
进入 UI 页面后,输入 admin、admin 登陆。
部署完成,测试完成!