Azkaban 3.90.0 高可用集群搭建

Azkaban的两种模式

solo-server模式:exec进程和web进程为同一个进程,存放元数据的数据库为H2(自带数据库)
multiple-executor模式:exec进程和web进程在不同的机器上,存放元数据的数据库为mysql

条件允许的话,可以剥离mysql,并添加多个azkaban-exec-server

服务器组件数据库
172.16.0.102azkaban-web-servermysql-server-slave
172.16.0.103azkaban-exec-servermysql-server-master

一、部署

1、172.16.0.103
1、部署 mysql5.7 或者5.6 (部署mysql8 会有异常,请看文章末尾)

#创建并使用数据库
CREATE DATABASE azkaban;
use azkaban;

#创建用户并授权
CREATE USER 'azkaban'@'%' IDENTIFIED BY '*****'; 
GRANT ALL ON azkaban.* to 'azkaban'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

修改配置

[mysqld]
...
max_allowed_packet=1024M

2、部署 jdk8 略,设置环境变量

3、下载安装包,开始编译

yum install -y  git gcc-c++
 
cd /opt/src
 
wget https://github.com/azkaban/azkaban/archive/3.90.0.tar.gz
tar xf azkaban-3.90.0.tar.gz
 
cd azkaban-3.90.0
#编译 第一次运行时,此过程时间会比较长
#-x test 表示跳过测试
./gradlew build installDist -x test
#编译完成看查看tar包
ll azkaban-*/build/distributions/*.tar.gz
[root@172.16.0.103:azkaban-3.90.0]# ll azkaban-*/build/distributions/*.tar.gz
-rw-r--r-- 1 root root 5925 Dec 30 11:32 azkaban-db/build/distributions/azkaban-db-0.1.0-SNAPSHOT.tar.gz
-rw-r--r-- 1 root root 16238767 Dec 30 11:55 azkaban-exec-server/build/distributions/azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz
-rw-r--r-- 1 root root 23139 Dec 30 11:46 azkaban-hadoop-security-plugin/build/distributions/azkaban-hadoop-security-plugin-0.1.0-SNAPSHOT.tar.gz
-rw-r--r-- 1 root root 36379429 Dec 30 11:56 azkaban-solo-server/build/distributions/azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz
-rw-r--r-- 1 root root 20304106 Dec 30 11:42 azkaban-web-server/build/distributions/azkaban-web-server-0.1.0-SNAPSHOT.tar.gz

把编译好的tar包拷贝出来,后面要用的就是这些

cp azkaban-*/build/distributions/*.tar.gz ./
组件功能
azkaban-common常用工具类
azkaban-db对应的sql脚本
azkaban-exec-serverazkaban的executor-server单独模块
azkaban-hadoop-secutity-pluginhadoop有关kerberos插件
azkaban-solo-serverweb和executor运行在同一进程的项目
azkaban-spiazkaban存储接口以及exception类
azkaban-web-serverazkaban的web-server单独模块

编译完成后,导入表结构(编译完成后,此文件就会出来,也可以去azkaban-db-0.1.0-SNAPSHOT.tar.gz里面找除了update开头的文件都导入,简单的方法就是导入下面的文件)

/opt/src/azkaban-3.90.0/azkaban-db/build/sql/create-all-sql-0.1.0-SNAPSHOT.sql

/opt/app/mysql5/bin/mysql -uroot -p******** azkaban < create-all-sql-0.1.0-SNAPSHOT.sql

mkdir /opt/app/azkaban && cd /opt/app/azkaban
tar xf  azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz -C /opt/app/azkaban
mv azkaban-exec-server-0.1.0-SNAPSHOT  azkaban-exec-server
cd azkaban-exec-server
 
[root@172.16.0.103:azkaban-exec-server-0.1.0-SNAPSHOT]# ll
total 16
drwxr-xr-x 3 root root 4096 Dec 30 11:55 bin
drwxr-xr-x 2 root root 4096 Dec 30 11:55 conf
drwxr-xr-x 2 root root 4096 Dec 30 11:55 lib
drwxr-xr-x 3 root root 4096 Dec 30 11:55 plugins
 
#编辑配置文件,修改参数
vim conf/azkaban.properties
default.timezone.id=Asia/Shanghai
azkaban.webserver.url=http://172.16.0.102:8081
mysql.port=3306
mysql.host=172.16.0.103
mysql.database=azkaban
mysql.user=azkaban
mysql.password=*******
 

启动(一定要在当前目录下启动

./bin/start-exec.sh

启动成功后会在当前目录下生成executor.port 文件,没有就检查日志
还要激活,出现success即可

cd /opt/app/azkaban/azkaban-exec-server
curl -G "localhost:$(<./executor.port)/executor?action=activate" && echo
# {"status":"success"}

2、172.16.0.102
1、部署 mysql5.7 略,设置主从

2、部署 jdk8 略,设置环境变量

3、将103上编译好的包 azkaban-web-server-0.1.0-SNAPSHOT.tar.gz 拷贝到102上

mkdir /opt/app/azkaban && cd /opt/app/azkaban
tar xf  azkaban-web-server-0.1.0-SNAPSHOT.tar.gz -C /opt/app/azkaban
mv azkaban-web-server-0.1.0-SNAPSHOT  azkaban-web-server
cd azkaban-web-server
 
 
#编辑配置文件
vim conf/azkaban.properties
default.timezone.id=Asia/Shanghai
mysql.port=3306
mysql.host=172.16.0.103
mysql.database=azkaban
mysql.user=azkaban
mysql.password=*******
 
 
#编辑用户配置文件
cat conf/azkaban-users.xml
<azkaban-users>
  <user groups="azkaban" password="azkaban" roles="admin" username="azkaban"/>
  <user password="metrics" roles="metrics" username="metrics"/>
  <user password="******" roles="admin,metrics" username="admin"/>       #新增此行,拥有admin 和 metrics 两个权限的超级管理账户
 
  <role name="admin" permissions="ADMIN"/>
  <role name="metrics" permissions="METRICS"/>
</azkaban-users>
 

启动(一定要在当前目录下启动
./bin/start-web.sh

访问

http://localhost:8081/

问题:

假如安装的是mysql 8,那么启动 azkaban-exec-server 会报 mysql连接错误 如下:

错误代码

2021/01/12 18:11:40.405 +0800 ERROR [MySQLDataSource] [main] [Azkaban] Failed to find write-enabled DB connection. Wait 15 seconds and retry. No.Attempt = 1
java.sql.SQLException: Cannot create PoolableConnectionFactory (java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long)
    at org.apache.commons.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:669)
    at org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:544)
    at azkaban.db.MySQLDataSource.getConnection(MySQLDataSource.java:78)
    at org.apache.commons.dbutils.AbstractQueryRunner.prepareConnection(AbstractQueryRunner.java:175)
    at org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:286)
    at azkaban.db.DatabaseOperator.query(DatabaseOperator.java:69)
    at azkaban.executor.ExecutorDao.fetchExecutor(ExecutorDao.java:63)
    at azkaban.executor.JdbcExecutorLoader.fetchExecutor(JdbcExecutorLoader.java:291)
    at azkaban.execapp.AzkabanExecutorServer.insertExecutorEntryIntoDB(AzkabanExecutorServer.java:304)
    at azkaban.execapp.AzkabanExecutorServer.start(AzkabanExecutorServer.java:256)
    at azkaban.execapp.AzkabanExecutorServer.launch(AzkabanExecutorServer.java:163)
    at azkaban.execapp.AzkabanExecutorServer.main(AzkabanExecutorServer.java:159)
Caused by: java.sql.SQLException: java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1086)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920)
    at com.mysql.jdbc.ConnectionImpl.buildCollationMapping(ConnectionImpl.java:1074)
    at com.mysql.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:3600)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2541)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2311)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:834)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:416)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:347)
    at org.apache.commons.dbcp2.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:55)
    at org.apache.commons.dbcp2.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:355)
    at org.apache.commons.dbcp2.BasicDataSource.validateConnectionFactory(BasicDataSource.java:115)
    at org.apache.commons.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:665)
    ... 11 more
Caused by: java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long
    at com.mysql.jdbc.ConnectionImpl.buildCollationMapping(ConnectionImpl.java:1019)
    ... 27 more

是因为自带的mysql连接驱动jar包版本过低无法连接mysql8,请更换 azkaban-exec-server/lib/mysql-connector-java-5.1.28.jar 这个jar包

更换为mysql-connector-java-5.1.44.jar 5.1.44版本以上都可以。下载地址:https://repo1.maven.org/maven2/mysql/mysql-connector-java/

注意此时还是不能连接会报错如下,需要将jdbc数据库连接参数后面追加 useSSL=false ,例:url: jdbc:mysql://localhost:3306/azkaban?characterEncoding=utf-8&useSSL=false , 需要更改源码重新编译,有个取巧的办法就是更改数据库配置 如:mysql.database=azkaban?useSSL=false

错误代码

2021/01/12 18:37:54.666 +0800  INFO [log] [main] [Azkaban] Started SocketConnector@0.0.0.0:36839
2021/01/12 18:37:54.769 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] Tue Jan 12 18:37:54 CST 2021 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
2021/01/12 18:37:54.872 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] Tue Jan 12 18:37:54 CST 2021 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
2021/01/12 18:37:54.882 +0800  INFO [AzkabanExecutorServer] [main] [Azkaban] This executor wasn't found in the DB. Adding self.
2021/01/12 18:37:54.892 +0800  INFO [AzkabanExecutorServer] [main] [Azkaban] Started Executor Server on 172.16.0.103:36839
2021/01/12 18:37:54.952 +0800  INFO [AzkabanExecutorServer] [main] [Azkaban] Setting timezone to Asia/Shanghai

还是推荐使用mysql5.7 ,同时如果非要使用mysql8还是进行编译为好。

问题二

任务无法执行,状态为preparing

web日志如下:

2021/01/15 17:34:00.591 +0800  INFO [ExecutorManager] [AzkabanWebServer-QueueProcessor-Thread] [Azkaban] Successfully refreshed executor: iZuf6e5whu8d7d5pcwmaxtZ:18219 (id: 6), active=true with executor info : ExecutorInfo{remainingMemoryPercent=79.77320197676259, remainingMemoryInMB=6024, remainingFlowCapacity=30, numberOfAssignedFlows=0, lastDispatchedTime=0, cpuUsage=0.0}
2021/01/15 17:34:00.591 +0800  INFO [ExecutorManager] [AzkabanWebServer-QueueProcessor-Thread] [Azkaban] Using dispatcher for execution id :27
2021/01/15 17:34:00.599 +0800  INFO [ExecutorManager] [AzkabanWebServer-QueueProcessor-Thread] [Azkaban] Reached handleNoExecutorSelectedCase stage for exec 27 with error count 0
2021/01/15 17:34:00.600 +0800  INFO [ExecutorManager] [AzkabanWebServer-QueueProcessor-Thread] [Azkaban] Using dispatcher for execution id :27
2021/01/15 17:34:00.600 +0800  INFO [ExecutorManager] [AzkabanWebServer-QueueProcessor-Thread] [Azkaban] Reached handleNoExecutorSelectedCase stage for exec 27 with error count 0

默认情况下 任务只分配给executor内存大于6G的节点执行,假如没有内存大于6G的executor,任务会持续等待直到有为止 (6x1024=6144M)

日志中executor内存信息为 remainingMemoryInMB=6024 ,所以不执行!

可以再web中修改配置文件 conf/azkaban.properties 去掉 MinimumFreeMemory

azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus

改为

azkaban.executorselector.filters=StaticRemainingFlowSize,CpuStatus

重启web 即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值