two server mode(双进程服务模式 ):存放元数据的数据库为 MySQL,MySQL 应采用主从模式进行备份和容错。这种模式下 webServer
和 executorServer
在不同进程中运行( 同一服务器 )。该模式适合生产环境,更新和升级时对用户的影响较小。
一、前置准备
需要用到 Azkaban 编译后的 gz
包( azkaban-web-server-0.1.0-SNAPSHOT.tar.gz、 azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz、 azkaban-db-0.1.0-SNAPSHOT.tar.gz ) ,手动编译 Azkaban 源码教程见:
Azkaban-solo-server环境搭建-视频教程
二、Two Server 模式部署
2.1 解压
在 /opt/software
下创建目录azkaban-two
, 然后把 3 个安装包分别解压到azkaban-two
目录下.
[xiaokang@hadoop software]$ mkdir azkaban-two
[xiaokang@hadoop ~]$ tar -zxvf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz -C /opt/software/azkaban-two/
[xiaokang@hadoop ~]$ tar -zxvf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz -C /opt/software/azkaban-two/
[xiaokang@hadoop ~]$ tar -zxvf azkaban-db-0.1.0-SNAPSHOT.tar.gz -C /opt/software/azkaban-two/
#重命名(可选)
[xiaokang@hadoop azkaban-two]$ mv azkaban-web-server-0.1.0-SNAPSHOT/ web-server
[xiaokang@hadoop azkaban-two]$ mv azkaban-exec-server-0.1.0-SNAPSHOT/ executor-server
[xiaokang@hadoop azkaban-two]$ mv azkaban-db-0.1.0-SNAPSHOT/ sql-db
2.2 在 MySQL 中创建 azkaban 需要的表
进入 MySQL, 创建数据库azkaban_two
,并创建需要的表
mysql> create database azkaban_two;
Query OK, 1 row affected (0.01 sec)
mysql> use azkaban_two;
Database changed
mysql> source E:\software\azkaban-db-0.1.0-SNAPSHOT\create-all-sql-0.1.0-SNAPSHOT.sql
Query OK, 0 rows affected (0.09 sec)
Query OK, 0 rows affected (0.02 sec)
Query OK, 0 rows affected (0.02 sec)
...
报错的这两张表都建立了一个varchar类型的索引,一个varchar(512)、一个varchar(640),上述报错说的是767字节,而varchar是字符,由于这里我使用的字符集为utf8,这个指每个字符最大的字节数为4,所以很明显 4*512(2048) 和 4*640(2560)都大于767,这里我都改成了varchar(128),问题成功解决!
2.3 生成密钥和证书(可选)
#此证书是在web-server中使用,所以建议生成在web-server目录下
[xiaokang@hadoop azkaban-two]$ keytool -keystore /opt/software/azkaban-two/web-server/keystore -alias xiaokang -genkey -keyalg rsa
keytool是 Java 数据证书的管理工具,使用户能够管理自己的公 /私钥 对及相关证书 。
-keystore 指定密钥库的名称及位置 (产生的各类信息将存在 .keystore文件中)
-genkey (或者 -genkeypair) 生成密钥对
-alias 为生成的密钥对指定别名,如果没有默认是 mykey
-keyalg 指定密钥的算法 RSA/DSA,默认是 DSA
查看密钥库信息:
[xiaokang@hadoop azkaban-two]$ keytool -list -keystore web-server/keystore
2.4 Web 服务器配置
在web服务器目录下创建多级文件夹plugins/jobtypes
:
[xiaokang@hadoop web-server]$ mkdir -p /opt/software/azkaban-two/web-server/plugins/jobtypes
进入 azkaban web 服务器安装目录的conf
目录下,修改azkaban.properties
#默认 Web Server 存放 web 文件的目录
web.resource.dir=/opt/software/azkaban-two/web-server/web
#默认时区为美国,改为亚洲 上海 默认
default.timezone.id=Asia/Shanghai
#用户权限管理信息文件
user.manager.xml.file=/opt/software/azkaban-two/web-server/conf/azkaban-users.xml
#executor全局配置文件
executor.global.properties=/opt/software/azkaban-two/web-server/conf/global.properties
#jetty配置
#jetty.use.ssl=false
jetty.ssl.port=8443
jetty.port=8081
jetty.keystore=/opt/software/azkaban-two/web-server/keystore
jetty.password=xiaokang
jetty.keypassword=xiaokang
jetty.truststore=/opt/software/azkaban-two/web-server/keystore
jetty.trustpassword=xiaokang
jetty.maxThreads=25
# Azkaban Executor settings
executor.port=11241
# Azkaban plugin settings
azkaban.jobtype.plugin.dir=/opt/software/azkaban-two/web-server/plugins/jobtypes
#数据库配置
database.type=mysql
mysql.port=3306
mysql.host=192.168.1.106
mysql.database=azkaban_two
mysql.user=root
mysql.password=xiaokang
mysql.numconnections=100
#去掉MinimumFreeMemory
azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus
完整配置文件内容如下:
# Azkaban Personalization Settings
azkaban.name=xiaokang
azkaban.label=xiaokang-Azkaban
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
web.resource.dir=/opt/software/azkaban-two/web-server/web
default.timezone.id=Asia/Shanghai
# Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
user.manager.xml.file=/opt/software/azkaban-two/web-server/conf/azkaban-users.xml
# Loader for projects
executor.global.properties=/opt/software/azkaban-two/web-server/conf/global.properties
azkaban.project.dir=projects
# Velocity dev mode
velocity.dev.mode=false
# Azkaban Jetty server properties.
jetty.ssl.port=8443
jetty.port=8081
jetty.keystore=/opt/software/azkaban-two/web-server/keystore
jetty.password=xiaokang
jetty.keypassword=xiaokang
jetty.truststore=/opt/software/azkaban-two/web-server/keystore
jetty.trustpassword=xiaokang
jetty.maxThreads=25
# Azkaban Executor settings
executor.port=11241
# 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=/opt/software/azkaban-two/web-server/plugins/jobtypes
# Azkaban mysql settings by default. Users should configure their own username and password.
database.type=mysql
mysql.port=3306
mysql.host=192.168.1.106
mysql.database=azkaban_two
mysql.user=root
mysql.password=xiaokang
mysql.numconnections=100
#Multiple Executor
azkaban.use.multiple.executors=true
azkaban.executorselector.filters=StaticRemainingFlowSize,CpuStatus
azkaban.executorselector.comparator.NumberOfAssignedFlowComparator=1
azkaban.executorselector.comparator.Memory=1
azkaban.executorselector.comparator.LastDispatched=1
azkaban.executorselector.comparator.CpuUsage=1
log4j.properties
修改日志文件路径:
log4j.appender.server.File=/opt/software/azkaban-two/web-server/logs/azkaban-webserver.log
在azkaban web 服务器安装目录的conf
目录下, 按照如下配置修改 azkaban-users.xml
文件,增加自定义管理员用户。
<azkaban-users>
<user groups="azkaban" password="azkaban" roles="admin" username="azkaban"/>
<user groups="azkaban" password="xiaokang" roles="admin" username="xiaokang"/>
<user password="metrics" roles="metrics" username="metrics"/>
<role name="admin" permissions="ADMIN"/>
<role name="metrics" permissions="METRICS"/>
</azkaban-users>
2.5 Executor 服务器配置
进入 azkaban executor 服务器安装目录的conf
目录下,修改azkaban.properties
#默认时区为美国,改为亚洲 上海 默认
default.timezone.id=Asia/Shanghai
#executor全局配置文件
executor.global.properties=/opt/software/azkaban-two/executor-server/conf/global.properties
#web服务器url
#azkaban.webserver.url=http://hadoop:8081
azkaban.webserver.url=https://hadoop:8443
# Azkaban plugin settings
azkaban.jobtype.plugin.dir=/opt/software/azkaban-two/executor-server/plugins/jobtypes
#数据库配置
database.type=mysql
mysql.port=3306
mysql.host=192.168.1.106
mysql.database=azkaban_two
mysql.user=root
mysql.password=xiaokang
mysql.numconnections=100
# Azkaban Executor settings
executor.port=11241
完整配置文件内容如下:
# Azkaban Personalization Settings
default.timezone.id=Asia/Shanghai
# Azkaban UserManager class
# Loader for projects
executor.global.properties=/opt/software/azkaban-two/executor-server/conf/global.properties
azkaban.project.dir=projects
azkaban.webserver.url=https://hadoop:8443
# Azkaban plugin settings
azkaban.jobtype.plugin.dir=/opt/software/azkaban-two/executor-server/plugins/jobtypes
# Azkaban mysql settings by default. Users should configure their own username and password.
database.type=mysql
mysql.port=3306
mysql.host=192.168.1.106
mysql.database=azkaban_two
mysql.user=root
mysql.password=xiaokang
mysql.numconnections=100
# Azkaban Executor settings
executor.maxThreads=50
executor.flow.threads=30
executor.port=11241
log4j.properties
修改日志文件路径:
log4j.appender.server.File=/opt/software/azkaban-two/executor-server/logs/azkaban-execserver.log
2.6 启动
#executor服务器bin目录下执行启动命令
[xiaokang@hadoop bin]$ ./start-exec.sh
#手动激活executor服务器
[xiaokang@hadoop ~]$ curl http://hadoop:11241/executor?action=activate
#web服务器bin目录下执行启动命令
[xiaokang@hadoop bin]$ ./start-web.sh
2.7 可能遇到的错误
启动web服务器遇到以下错误:
没有找到活动的executors,需在MySQL数据库里设置端口为35496(每次重启后都不一样)的executors表的active为1
2.8 验证
验证方式一:使用 jps
命令查看是否有AzkabanExecutorServer
和 AzkabanWebServer
进程:
验证方式二:访问 8081 端口(未配置SSL),查看 Web UI 界面:
访问 8443 端口(配置SSL),查看 Web UI 界面:
2.9 踩坑分享
- web.resource.dir项的值要使用绝对路径,否则web页面会没有美丽的界面。
- user.manager.xml.file项的值要使用绝对路径,否则启动的时候会报找不到文件的错误。
每次重启web服务器都会报以下错误,可以按照2.7操作,或者我们也可以直接更改web服务器目录和executor服务器目录下conf
目录下的azkaban.properties
文件:
#web-设置Executor服务器的端口号固定为11241
# Azkaban Executor settings
executor.port=11241
#executor-设置Executor服务器的端口号固定为11241
# Azkaban Executor settings
executor.port=11241
#语法:curl http://${executorHost}:${executorPort}/executor?action=activate
[xiaokang@hadoop bin]$ curl http://hadoop:11241/executor?action=activate
{"status":"success"}
四、基本任务调度
4.1 新建项目
在 Azkaban 主界面创建一个新项目:
4.2 任务配置
新建 xiaokang.flow
配置文件,内容如下。这里的任务很简单,就是输出一句 Hello Azkaban,Flow-2.0! xk1181259634
:
nodes:
- name: firstJob-xiaokang
type: command
config:
command: echo "Hello Azkaban,Flow-2.0! xk1181259634"
如果你希望以 2.0 的方式运行,则需要新建一个 project
文件,指明是使用的是 Flow 2.0:
azkaban-flow-version: 2.0
4.3 打包上传
将 xiaokang.flow
和xiaokang.project
打包为 zip
压缩文件:
通过 Web UI 界面上传:
上传成功后可以看到对应的 Flows:
4.4 执行任务
点击页面上的 Execute Flow
执行任务:
4.5 执行结果
点击 Log
可以查看到任务的执行日志:
4.6 踩坑分享
web服务器目录下azkaban.jobtype.plugin.dir=plugins/jobtypes这一项一定要配置,并且创建文件夹,不然会报错,错误信息如下:
[xiaokang@hadoop conf]$ mkdir -p /opt/software/azkaban-two/web-server/plugins/jobtypes
执行job时一直处于preparing状态:
解决方案:修改web服务器目录中conf目录下的azkaban.properties配置文件,去掉MinimumFreeMemory
执行任务时直接失败,报错如下:
解决方案:在executor服务器目录中plugins/jobtypes
目录下修改commonprivate.properties
配置文件,追加内容:azkaban.native.lib=false
,改完后分发给web服务器一份儿,然后重启web和executor。
# set execute-as-user
execute.as.user=false
azkaban.native.lib=false
[xiaokang@hadoop jobtypes]$ cp /opt/software/azkaban-two/executor-server/plugins/jobtypes/commonprivate.properties /opt/software/azkaban-two/web-server/plugins/jobtypes/