azkaban4.0 编译

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 -versionjavac -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

解决方案:

  1. 确认安装了正确的 JDK 版本
  2. 设置正确的 JAVA_HOME
  3. 在 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

解决方案:

  1. 检查网络连接和代理设置
  2. 配置国内镜像源(在 ~/.m2/settings.xml 中添加):
<mirrors>
  <mirror>
    <id>aliyunmaven</id>
    <mirrorOf>*</mirrorOf>
    <name>阿里云公共仓库</name>
    <url>https://maven.aliyun.com/repository/public</url>
  </mirror>
</mirrors>
  1. 清理本地仓库并重试: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.

解决方案:

  1. 确认 Node.js 和 npm 版本符合要求
  2. 尝试升级 Node.js:npm install -g n && n 16.14.0
  3. 清理 node_modules:rm -rf node_modules package-lock.json
  4. 重新安装依赖:npm install --registry=https://registry.npm.taobao.org

4.4 内存不足错误

问题现象:

[ERROR] Java heap space
[ERROR] OutOfMemoryError

解决方案:

  1. 增加 Maven 内存:
export MAVEN_OPTS="-Xmx4g -XX:MaxMetaspaceSize=1g -XX:+UseG1GC"
  1. 在 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

解决方案:

  1. 在 pom.xml 中确认 MySQL 驱动版本:
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>8.0.28</version>
</dependency>
  1. 如果使用 MySQL 5.x,降级到 5.1.49 版本

4.6 编译时间过长

优化方案:

  1. 使用并行编译:mvn clean package -T 4 -DskipTests
  2. 跳过测试:-DskipTests-Dmaven.test.skip=true
  3. 使用离线模式:mvn clean package -o -DskipTests
  4. 清理不必要的模块: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. 后续步骤

  1. 配置数据库: 创建 MySQL 数据库并导入初始 schema

  2. 配置文件: 修改 conf/azkaban.propertiesconf/globals.properties

  3. 启动服务:

    # 启动 Web Server
    ./bin/start-web.sh
    
    # 启动 Exec Server
    ./bin/start-exec.sh
    
  4. 访问 UI: http://localhost:8081

--- 本文结束 The End ---