1. 环境要求
1.1 操作系统要求
- Ubuntu 20.04+ / CentOS 7+ / Debian 10+
- 推荐使用 Ubuntu 22.04 或更高版本
- 64位操作系统
1.2 Java 环境
必需版本: Java 8 (JDK 1.8) 或 Java 11 (JDK 11)
推荐版本: Java 11 (LTS 版本)
验证命令:
java -version和javac -version环境变量:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 export PATH=$JAVA_HOME/bin:$PATH
1.3 Maven 构建工具
必需版本: Apache Maven 3.5.0+
推荐版本: Maven 3.8.6+
验证命令:
mvn -v环境变量:
export MAVEN_HOME=/opt/maven export PATH=$MAVEN_HOME/bin:$PATH
1.4 Git 版本控制
- 必需版本: Git 2.10.0+
- 验证命令:
git --version
1.5 其他依赖
- CMake: 3.10.0+ (用于某些 native 组件)
- Node.js: 12.0.0+ (用于前端构建)
- npm: 6.0.0+ (用于前端构建)
- 内存要求: 至少 4GB RAM,推荐 8GB+
- 磁盘空间: 至少 2GB 可用空间
2. 编译配置
2.1 下载 Azkaban 源码
# 方式1: 从 GitHub 克隆最新源码
git clone https://github.com/azkaban/azkaban.git
cd azkaban
# 方式2: 下载特定版本的源码 (推荐)
wget https://github.com/azkaban/azkaban/archive/refs/tags/4.0.0.tar.gz
tar -xzf 4.0.0.tar.gz
cd azkaban-4.0.0
2.2 配置 Maven 设置
创建或编辑 ~/.m2/settings.xml 文件:
<settings>
<profiles>
<profile>
<id>azkaban</id>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</profile>
</profiles>
<activeProfiles>
<activeProfile>azkaban</activeProfile>
</activeProfiles>
</settings>
2.3 配置编译参数
Azkaban 4.0 支持多种编译选项:
-DskipTests: 跳过单元测试(加快编译速度)-Dmaven.test.skip=true: 完全跳过测试编译和执行-Pprod: 生产环境配置-Pdev: 开发环境配置-Dnodejs.version=16.14.0: 指定 Node.js 版本
3. 编译过程
3.1 初始化环境
# 验证环境
java -version
mvn -v
git --version
# 设置 Maven 本地仓库(可选)
export MAVEN_OPTS="-Xmx2g -XX:MaxMetaspaceSize=512m"
3.2 清理并编译
# 进入 Azkaban 根目录
cd /path/to/azkaban
# 清理之前的构建
cd azkaban-web-server && mvn clean && cd ..
cd azkaban-exec-server && mvn clean && cd ..
cd azkaban-solo-server && mvn clean && cd ..
# 执行全量编译(推荐)
mvn clean compile -DskipTests
# 或者执行完整构建(包含测试和打包)
mvn clean package -DskipTests
3.3 分模块编译
Azkaban 4.0 包含多个核心模块:
3.3.1 编译 Web Server
cd azkaban-web-server
mvn clean package -DskipTests
# 输出文件: target/azkaban-web-server-4.0.0.jar
3.3.2 编译 Exec Server
cd azkaban-exec-server
mvn clean package -DskipTests
# 输出文件: target/azkaban-exec-server-4.0.0.jar
3.3.3 编译 Solo Server(独立模式)
cd azkaban-solo-server
mvn clean package -DskipTests
# 输出文件: target/azkaban-solo-server-4.0.0.jar
3.3.4 编译 MySQL 插件
cd azkaban-mysql-plugin
mvn clean package -DskipTests
# 输出文件: target/azkaban-mysql-plugin-4.0.0.jar
3.4 前端资源编译
# 进入前端目录
cd azkaban-web-server/src/main/webapp
# 安装依赖
npm install
# 构建前端资源
npm run build
# 或者使用 Maven 构建(如果配置了前端插件)
cd ../../..
mvn clean package -Pfrontend -DskipTests
3.5 生成分发包
# 使用 Maven Assembly Plugin 生成分发包
mvn clean package -Pdist -DskipTests
# 输出目录:
# azkaban-web-server/target/azkaban-web-server-4.0.0.tar.gz
# azkaban-exec-server/target/azkaban-exec-server-4.0.0.tar.gz
# azkaban-solo-server/target/azkaban-solo-server-4.0.0.tar.gz
4. 常见问题及解决方案
4.1 Java 版本不兼容
问题现象:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile
[ERROR] Fatal error compiling: invalid target release: 11
解决方案:
- 确认安装了正确的 JDK 版本
- 设置正确的 JAVA_HOME
- 在 pom.xml 中修改
<maven.compiler.source>和<maven.compiler.target>为系统支持的版本
4.2 Maven 依赖下载失败
问题现象:
[ERROR] Failed to execute goal on project azkaban-web-server: Could not resolve dependencies
解决方案:
- 检查网络连接和代理设置
- 配置国内镜像源(在 ~/.m2/settings.xml 中添加):
<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
- 清理本地仓库并重试:
rm -rf ~/.m2/repository/org/azkaban/
4.3 Node.js 前端构建失败
问题现象:
[ERROR] Failed to execute goal com.github.eirslett:frontend-maven-plugin:1.12.1:npm
[ERROR] Failed to run task: 'npm install' failed.
解决方案:
- 确认 Node.js 和 npm 版本符合要求
- 尝试升级 Node.js:
npm install -g n && n 16.14.0 - 清理 node_modules:
rm -rf node_modules package-lock.json - 重新安装依赖:
npm install --registry=https://registry.npm.taobao.org
4.4 内存不足错误
问题现象:
[ERROR] Java heap space
[ERROR] OutOfMemoryError
解决方案:
- 增加 Maven 内存:
export MAVEN_OPTS="-Xmx4g -XX:MaxMetaspaceSize=1g -XX:+UseG1GC"
- 在 pom.xml 中调整编译插件内存:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<fork>true</fork>
<meminitial>512m</meminitial>
<maxmem>2g</maxmem>
</configuration>
</plugin>
4.5 MySQL 驱动版本冲突
问题现象:
[ERROR] ClassNotFoundException: com.mysql.cj.jdbc.Driver
解决方案:
- 在 pom.xml 中确认 MySQL 驱动版本:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
- 如果使用 MySQL 5.x,降级到 5.1.49 版本
4.6 编译时间过长
优化方案:
- 使用并行编译:
mvn clean package -T 4 -DskipTests - 跳过测试:
-DskipTests或-Dmaven.test.skip=true - 使用离线模式:
mvn clean package -o -DskipTests - 清理不必要的模块:
mvn clean package -pl azkaban-web-server,azkaban-exec-server -am -DskipTests
5. 验证编译结果
5.1 检查输出文件
# 检查核心 JAR 文件
ls -la azkaban-web-server/target/azkaban-web-server-*.jar
ls -la azkaban-exec-server/target/azkaban-exec-server-*.jar
# 检查分发包
ls -la azkaban-web-server/target/azkaban-web-server-*-bin.tar.gz
5.2 运行基本验证
# 检查 JAR 文件完整性
java -jar azkaban-web-server/target/azkaban-web-server-4.0.0.jar --help
# 检查类路径
jar -tf azkaban-web-server/target/azkaban-web-server-4.0.0.jar | head -20
6. 后续步骤
配置数据库: 创建 MySQL 数据库并导入初始 schema
配置文件: 修改
conf/azkaban.properties和conf/globals.properties启动服务:
# 启动 Web Server ./bin/start-web.sh # 启动 Exec Server ./bin/start-exec.sh访问 UI: http://localhost:8081