Azkaban-1.搭建Azkaban源代码阅读环境

Catalogue
  1. 1. 从github下载源代码
  2. 2. 编译
  3. 3. 数据库、表初始化
  4. 4. 运行azkaban Exec节点
  5. 5. 运行azkaban Web节点
  6. 6. 远程调试

在公司的日常工作中, 经常会用到 Azkaban。作为一种工作流管理系统, 对我来说, 的确有学习的价值。

本文将会使用最新版的Azkaban源代码, 编译并搭建一套可运行调试的系统。开发工具使用的是IDEA, 运行环境是CentOS7。

从github下载源代码

截止目前,最新的tag版本是: 3.86.0
可以直接点击下载源码: 3.86.0

编译

用IDEA打开, File -> Open… -> 选择已解压的代码目录 -> 点击 OK。
此时, IDEA会自动同步一些Gradle项目的配置,稍微等待一会。

为了解决gradle项目下载依赖慢的问题, 我们可以加上阿里云的maven仓库地址。
在azkaban根目录下的 build.gradle 中加入下面内容即可:

1
maven { url "http://maven.aliyun.com/nexus/content/groups/public" }

加入后的效果是这样的:

1
2
3
4
5
6
7
8
9
allprojects {
apply plugin: 'jacoco'

repositories {
maven { url "http://maven.aliyun.com/nexus/content/groups/public" }
mavenCentral()
mavenLocal()
}
}

注意: 这里需要保留原来的仓库地址, 因为有些依赖阿里云仓库下载不到

再配置一个 npm的淘宝源, 毕竟国外的不太稳定。
在用户目录下, 创建 .npmrc 文件:

1
vi ~/.npmrc

再加入以下内容即可:

1
registry=https://registry.npm.taobao.org/

配置好之后, 我们就可以执行以下命令编译了:

1
./gradlew build -x test

编译成功后, 就有了az-web 和 az-exec 的可运行程序压缩包了。

数据库、表初始化

推荐使用 MySQL5.7.x

1
2
3
4
5
6
7
8
-- 创建数据库
mysql> CREATE DATABASE azkaban;

--创建用户, username/password 自定义
mysql> CREATE USER 'username'@'%' IDENTIFIED BY 'password';

--授权, <username> 改为你自己的用户名
mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON azkaban.* to '<username>'@'%' WITH GRANT OPTION;

调整Mysql Packet Size, 找到MySQL的配置文件,修改max_allowed_packet=1024M

1
2
3
[mysqld]
...
max_allowed_packet=1024M

重启MySQL

1
sudo /sbin/service mysqld restart

使用初始化sql建表:

1
2
# 位置
azkaban-3.86.0\azkaban-db\build\sql\create-all-sql-0.1.0-SNAPSHOT.sql

运行azkaban Exec节点

编译后的压缩包路径: azkaban-exec-server/build/distributions/azkaban-exec-server-0.1.0-SNAPSHOT.zip

1.更改配置文件
上传 azkaban-exec-server-0.1.0-SNAPSHOT.zip 到 centos 服务器上,解压。修改 azkaban-exec-server/conf/azkaban.properties 配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 数据库信息
mysql.port=3306
mysql.host=192.168.3.25
mysql.database=azkaban
mysql.user=root
mysql.password=123456

# 执行节点信息
executor.port=12321
azkaban.use.multiple.executors=true
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

2.设置远程debug
2.1 编辑文件 azkaban-exec-server/bin/internal/internal-start-executor.sh, 增加一个 AZKABAN_OPTS 值

1
2
3
......
AZKABAN_OPTS="$AZKABAN_OPTS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5554"
java $AZKABAN_OPTS $JAVA_LIB_PATH -cp $CLASSPATH azkaban.execapp.AzkabanExecutorServer -conf $conf $@ &

2.2 IDEA中配置
点击编辑运行时配置 -> 点击左上角的 + ,选择 Remote 选项。配置如下图:

说明:

  • Host: 为az执行节点的IP
  • Port: 为 上面我们配置的那个远程debug端口
  • Use module classpath: 为az-exec模块的main

点击OK即可, 需要远程服务先启动,才能进行远程debug操作。

3.运行并激活az-exec
运行:

1
2
cd azkaban-exec-server
bin/start-exec.sh

激活:

1
curl -G "http://192.168.3.25:12321/executor?action=activate" && echo
  • 192.168.3.25:12321 为 az执行节点的地址

此时, 可以发现azkaban库 executors 表中已经有执行节点的记录

运行azkaban Web节点

编译后的压缩包路径:
azkaban-web-server/build/distributions/azkaban-web-server-0.1.0-SNAPSHOT.zip

1.更改配置文件
上传 azkaban-web-server-0.1.0-SNAPSHOT.zip 到 centos 服务器上,解压。修改 azkaban-web-server/conf/azkaban.properties 配置文件:

1
2
3
4
5
6
# 数据库信息
mysql.port=3306
mysql.host=192.168.3.25
mysql.database=azkaban
mysql.user=root
mysql.password=123456

2.设置远程debug
2.1 编辑文件 azkaban-web-server/bin/internal/internal-start-web.sh, 增加一个 AZKABAN_OPTS 值

1
2
3
......
AZKABAN_OPTS="$AZKABAN_OPTS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5555"
java $AZKABAN_OPTS $JAVA_LIB_PATH -cp $CLASSPATH azkaban.webapp.AzkabanWebServer -conf $conf $@ &

2.2 IDEA中配置
点击编辑运行时配置 -> 点击左上角的 + ,选择 Remote 选项。配置如下图:

3.运行az-web

1
2
cd azkaban-web-server
bin/start-web.sh

4.登录
Azkaban默认使用的xml来管理用户。配置文件目录: azkaban-web-server/conf/azkaban-users.xml
访问 http://192.168.3.25:8081, 使用azkaban/azkaban 即可登录。

  • 192.168.3.25: 为 az-web的ip
  • 8081: 为az-web的端口

远程调试

在 az-web 和 az-exec 都启动之后, 先确保所有端口都能正常访问, 我这儿配置的是

  • az-exec服务端口: 12321
  • az-exec远程debug端口: 5554
  • az-web服务端口: 8091
  • az-web远程debug端口: 5555

然后在IDEA中运行下图中的这两项即可。

在想要看细节的地方打上断点, 就可以愉快玩耍啦。