Azkaban 安装完整教程(基于 WSL2/Ubuntu)
本教程详细指导在Windows11的WSL2Ubuntu24.04中安装Azkaban工作流调度系统。关键步骤包括环境准备确保Java8、Gradle5.0和Node.js16已安装需通过update-alternatives切换Java版本。编译安装克隆Azkaban源码后配置阿里云镜像加速依赖下载使用Gradle编译约3-5分钟。启动服务解压生成的安装包修改时区为Asia/Shanghai运行start-solo.sh启动服务。访问验证通过浏览器访问http://localhost:8081默认账号密码均为azkaban。常见问题Java版本冲突需切换至JDK8端口占用可修改jetty.port依赖下载慢需配置镜像源。成功标志为WebUI正常登录及jps显示服务进程。Azkaban 安装完整教程基于 WSL2/UbuntuAzkaban 是 LinkedIn 开源的批量工作流任务调度器用于在一个工作流内以特定顺序运行一组任务。Azkaban 简介与模式选择Azkaban 提供三种部署模式模式说明适用场景solo-server modeWeb 和 Executor 在同一进程使用 H2 内嵌数据库学习和测试推荐two-server modeWeb 和 Executor 分离使用 MySQL 数据库生产环境multiple-executor mode多 Executor 集群Web 和 Executor 分离部署大规模生产环境初学者建议选择solo-server mode最简单快捷无需配置 MySQL 和 SSL。本教程基于你的实际安装过程整理适用于Windows 11 WSL2 Ubuntu 24.04环境。因为 Azkaban 不需要系统级别的权限也不依赖特定的系统路径安装在用户家目录下是最方便的选择。为什么不建议装其他地方安装位置优点缺点家目录~不需要sudo权限自由方便修改配置和删除无/usr/local/系统级目录看起来正规需要sudo配置文件可能被权限问题困扰/opt/第三方软件常见位置需要sudo不够灵活结论对于学习用途家目录是最佳选择。你的 Hadoop 和 Sqoop 装在了/usr/local/下但那是通过sudo安装的。Azkaban 装在~/azkaban下不会有任何冲突。Git 克隆项目的常见结构先建一个父目录用于归类克隆时会自动创建与仓库同名的子目录。不要自己改目录问题父目录就是源码目录不符合父目录 → 仓库目录的标准结构不便于管理多个项目。# 查看目录结构 ls -la ~/azkaban ls -la ~/azkaban/azkaban # 检查 gradlew 文件是否存在 ls -la ~/azkaban/azkaban/gradlew一、环境准备安装 Azkaban 前请确保以下环境已就绪环境要求检查命令推荐版本Javajava -versionJava 8必须Gradlegradle --version5.0Node.jsnode --version16.x 或更高npmnpm --version对应版本sudo: unzip: command not found你的系统里没有安装unzip命令所以无法解压下载的zip文件。安装unzip工具在终端中运行以下命令来安装unzipsudo apt update sudo apt install unzip -y⚠️重要Azkaban 编译需要Java 8。如果系统中有多个 Java 版本编译前必须切换到 Java 8。mumuMuJinqiu:~/azkaban/repo$ node --version npm --version v24.11.1 11.7.0 mumuMuJinqiu:~/azkaban/repo$很好你的 Node.js 版本是v24.11.1npm 版本是11.7.0版本很新完全满足要求。现在按步骤修改配置并重新编译。什么是 Gradle简单来说Gradle 是一个自动化项目构建工具。它的作用它可以帮助开发者自动化地完成下载项目依赖、编译源代码、运行测试、打包应用等一系列繁琐的任务。为什么用它像 Azkaban 这样复杂的开源项目用它来管理构建过程可以保证不管在谁的电脑上都能用同样的方式、同样的步骤把它编译成功。你刚才执行./gradlew的时候用的其实是 Azkaban 项目自带的Gradle Wrapper。它就像一个项目专属的Gradle启动脚本如果检测到系统里没有合适的Gradle版本它会自动下载。但因为网络问题它的自动下载失败了所以我们才需要手动安装好 Gradle 来“帮”它一把。Gradle 的默认行为——下载大文件时不显示进度条只在下载完成后才显示一行输出。终端没反应通常是正常的尤其是在下载 Gradle 发行版约 100MB时看起来就像卡住了一样。在当前终端按CtrlShiftD或在启动 gradle 时添加参数bash# 停止当前编译CtrlC然后重新执行 ./gradlew build installDist -x test --info--info会显示详细日志可以看到下载的具体进度。最常见的卡住原因分析现象可能原因解决方法完全无输出Gradle 正在下载 gradle-5.0-all.zip约 100MB等待 5-10 分钟最后一行是Downloading...同上网络慢耐心等待或换镜像有Exception或Could not resolve网络超时或依赖下载失败按 CtrlC 重试或换镜像长时间15分钟无变化可能真的卡住了按 CtrlC手动配置 GradlemumuMuJinqiu:~$ # 使用华为云镜像下载 Gradle 5.0 wget https://repo.huaweicloud.com/gradle/gradle-5.0-all.zip --2026-05-26 12:57:29-- https://repo.huaweicloud.com/gradle/gradle-5.0-all.zip Resolving repo.huaweicloud.com (repo.huaweicloud.com)... 115.223.9.102, 115.223.9.100, 115.223.9.101 Connecting to repo.huaweicloud.com (repo.huaweicloud.com)|115.223.9.102|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 129875268 (124M) [application/octet-stream] Saving to: ‘gradle-5.0-all.zip’ gradle-5.0-all.zip 100%[] 123.86M 6.29MB/s in 23s 2026-05-26 12:57:50 (5.31 MB/s) - ‘gradle-5.0-all.zip’ saved [129875268/129875268] mumuMuJinqiu:~$华为云镜像下载成功了Gradle 5.0 已经下载完毕124MB用了 23 秒速度很快。现在继续执行后续步骤# 1. 解压到 /opt 目录 sudo unzip -d /opt gradle-5.0-all.zip # 2. 配置环境变量 echo export PATH/opt/gradle-5.0/bin:$PATH ~/.bashrc source ~/.bashrc # 3. 验证安装 gradle --versionWelcome to Gradle 5.0! Here are the highlights of this release: - Kotlin DSL 1.0 - Task timeouts - Dependency alignment aka BOM support - Interactive gradle init For more details see https://docs.gradle.org/5.0/release-notes.html ------------------------------------------------------------ Gradle 5.0 ------------------------------------------------------------ Build time: 2018-11-26 11:48:43 UTC Revision: 7fc6e5abf2fc5fe0824aec8a0f5462664dbcd987 Kotlin DSL: 1.0.4 Kotlin: 1.3.10 Groovy: 2.5.4 Ant: Apache Ant(TM) version 1.9.13 compiled on July 10 2018 JVM: 11.0.30 (Ubuntu 11.0.307-post-Ubuntu-1ubuntu124.04) OS: Linux 6.6.87.2-microsoft-standard-WSL2 amd64 mumuMuJinqiu:~$Gradle 5.0 安装成功从输出可以看到Gradle 已经正确安装并运行。现在可以开始编译 Azkaban 了。现在执行编译# 进入 Azkaban 源码目录 cd ~/azkaban/azkaban # 编译跳过测试 ./gradlew build installDist -x test编译过程中需要注意的阶段预计时间说明初始化10-30秒Gradle 启动读取配置下载依赖3-10分钟下载项目所需的 jar 包使用阿里云镜像会快一些编译代码1-2分钟编译 Java/Scala 源码打包30秒生成安装包如果gradle命令找不到确认一下环境变量# 查看 gradle 是否在 PATH 中 which gradle # 如果没有重新加载配置 source ~/.bashrc # 或者手动添加 export PATH/opt/gradle-5.0/bin:$PATHwhich gradle命令没有输出说明 Gradle 还没有添加到 PATH 环境变量中。后面手动添加了export PATH/opt/gradle-5.0/bin:$PATH这个命令只在当前窗口生效。为了让系统在任何位置都能识别gradle命令需要配置环境变量。永久配置环境变量让所有新窗口都生效bash# 将 Gradle 路径永久添加到 .bashrc echo export PATH/opt/gradle-5.0/bin:$PATH ~/.bashrc # 重新加载 source ~/.bashrc # 验证 which gradle gradle --version重新执行cd ~/azkaban/repo gradle build installDist -x testmumuMuJinqiu:~$ # 将 Gradle 路径永久添加到 .bashrc echo export PATH/opt/gradle-5.0/bin:$PATH ~/.bashrc # 重新加载 source ~/.bashrc # 验证 which gradle gradle --version /opt/gradle-5.0/bin/gradle ------------------------------------------------------------ Gradle 5.0 ------------------------------------------------------------ Build time: 2018-11-26 11:48:43 UTC Revision: 7fc6e5abf2fc5fe0824aec8a0f5462664dbcd987 Kotlin DSL: 1.0.4 Kotlin: 1.3.10 Groovy: 2.5.4 Ant: Apache Ant(TM) version 1.9.13 compiled on July 10 2018 JVM: 11.0.30 (Ubuntu 11.0.307-post-Ubuntu-1ubuntu124.04) OS: Linux 6.6.87.2-microsoft-standard-WSL2 amd64很好Gradle 已经配置好了。现在需要切换 Java 版本来解决编译错误。编译失败了原因是Java 版本不兼容。错误信息class file has wrong version 55.0, should be 53.0表明55.0 Java 11你当前使用的版本53.0 Java 9Azkaban 需要的版本Azkaban 的某些模块要求使用Java 8 或 Java 9而你的系统使用的是Java 11。二、安装 Java 8 并切换版本bash# 1. 安装 Java 8 sudo apt update sudo apt install openjdk-8-jdk -y # 2. 查看已安装的 Java 版本 sudo update-java-alternatives --list # 3. 切换到 Java 8 sudo update-alternatives --config java # 选择 Java 8 对应的编号 # 4. 验证 java -version # 应显示 openjdk version 1.8.0_xxxmumuMuJinqiu:~$ sudo update-java-alternatives --list [sudo] password for mumu: java-1.11.0-openjdk-amd64 1111 /usr/lib/jvm/java-1.11.0-openjdk-amd64 java-1.17.0-openjdk-amd64 1711 /usr/lib/jvm/java-1.17.0-openjdk-amd64 java-1.8.0-openjdk-amd64 1081 /usr/lib/jvm/java-1.8.0-openjdk-amd64 mumuMuJinqiu:~$你已经安装了 Java 8、11、17 三个版本。现在切换到 Java 8切换到 Java 8bashsudo update-alternatives --config java输入数字选择 Java 8对应的编号通常是2或3看你终端显示的具体数字然后回车。验证切换结果bashjava -version应该显示textopenjdk version 1.8.0_xxx确认 Gradle 使用的 Java 版本bashgradle --version确保JVM:一行显示的是1.8.0_xxx而不是 11.0.30。然后编译 Azkabanbashcd ~/azkaban/repo gradle clean gradle build installDist -x test问题还在虽然你切换了系统的 Java 版本但Gradle 仍然在使用 Java 11进行编译。从错误信息class file has wrong version 55.0, should be 53.0可以看出55.0 Java 11Gradle 实际使用的53.0 Java 9Azkaban 需要的解决方案让 Gradle 使用 Java 8设置 Gradle 的 JAVA_HOMEbash# 找到 Java 8 的安装路径 dirname $(dirname $(readlink -f $(which java)))输出应该是/usr/lib/jvm/java-8-openjdk-amd64然后设置环境变量并编译bashcd ~/azkaban/repo export JAVA_HOME/usr/lib/jvm/java-8-openjdk-amd64 export PATH$JAVA_HOME/bin:$PATH # 验证 java -version gradle --version # 编译 gradle clean gradle build installDist -x test三、安装 Gradle 5.0bash# 1. 下载 Gradle 5.0使用华为云镜像加速 cd ~ wget https://repo.huaweicloud.com/gradle/gradle-5.0-all.zip # 2. 解压到 /opt sudo unzip -d /opt gradle-5.0-all.zip # 3. 配置环境变量 echo export PATH/opt/gradle-5.0/bin:$PATH ~/.bashrc source ~/.bashrc # 4. 验证 gradle --version # 应显示 Gradle 5.0JVM 为 1.8.0_xxx四、下载并编译 Azkaban⚠️注意编译过程需要下载大量依赖包网络不稳定时可能会失败。如果失败多执行几次命令即可。bash# 1. 创建并进入项目目录 mkdir -p ~/azkaban cd ~/azkaban # 2. 克隆源码 git clone https://github.com/azkaban/azkaban.git # 3. 进入源码目录 cd azkaban # 4. 配置阿里云镜像加速可选推荐 echo repositories.grails.default https://maven.aliyun.com/repository/public gradle.properties # 5. 修改 Node.js 配置避免下载失败 cd azkaban-web-server nano build.gradle找到node { ... }配置块修改为groovynode { version 24.11.1 // 改成你安装的 Node.js 版本 npmVersion 11.7.0 // 改成你安装的 npm 版本 download false // 禁止自动下载 workDir file(${project.buildDir}/nodejs) nodeModulesDir file(${project.projectDir}) }bash# 6. 返回根目录并编译 cd ~/azkaban/azkaban gradle build installDist -x test错误:azkaban-web-server:nodeSetup失败是因为构建脚本试图从https://nodejs.org/dist/v8.10.0/ivy.xml下载 Node.js 8.10.0但返回了403 Forbidden错误。这通常意味着官方不再直接支持通过这个旧方式自动下载了。解决方案让Azkaban使用你系统里已有的Node.js核心思路是禁止它自动下载强制它使用你电脑上全局安装的Node.js。这是最关键的一步。我们需要找到并修改azkaban-web-server模块下的build.gradle文件告诉它不要再尝试下载Node.js。在文件中找到node { ... }这个配置块它看起来应该和下面的内容类似。你需要做两处修改将download true改为download false。可以选择更新version为你刚才安装的版本。修改完成后按Ctrl X然后按Y最后按Enter保存并退出。清理并重新编译第一步修改azkaban-web-server/build.gradlebashcd ~/azkaban/repo/azkaban-web-server nano build.gradle在文件中找到node { ... }这个配置块大约在第 40-50 行左右把它修改成下面这样groovynode { version 24.11.1 // 改成你安装的版本 npmVersion 11.7.0 // 改成你安装的 npm 版本 download false // 关键禁止自动下载 workDir file(${project.buildDir}/nodejs) nodeModulesDir file(${project.projectDir}) }保存退出CtrlX→Y→回车第二步清理并重新编译bashcd ~/azkaban/repo gradle clean gradle build installDist -x test编译时间约 3-5 分钟取决于网络速度。BUILD SUCCESSFUL in 2m 59s 84 actionable tasks: 76 executed, 8 from cache mumuMuJinqiu:~/azkaban/repo$编译成功恭喜你Azkaban 已经成功编译完成五、启动 Azkabanbash# 1. 进入 distributions 目录 cd ~/azkaban/azkaban/azkaban-solo-server/build/distributions # 2. 查看实际生成的安装包名称 ls -la # 3. 解压使用实际文件名 tar -zxvf azkaban-solo-server-*.tar.gz # 4. 进入解压后的目录 cd azkaban-solo-server-* # 5. 修改时区配置 sed -i s/default.timezone.idAmerica\/Los_Angeles/default.timezone.idAsia\/Shanghai/ conf/azkaban.properties # 6. 启动 ./bin/start-solo.sh # 7. 查看进程 jps | grep -i azkaban2210902 AzkabanSingleServerAzkaban 启动成功你已经启动了 Azkaban 服务它会作为一个后台守护进程持续运行不依赖于你当前打开的终端窗口。从输出中看到的2210902 AzkabanSingleServer就是它在后台运行的进程 ID。如何验证关闭终端窗口后重新打开一个新的终端执行bashjps | grep -i azkaban如果还能看到AzkabanSingleServer进程说明服务仍在运行。下次如何使用方式一查看运行状态bashjps | grep -i azkaban方式二停止服务bashcd ~/azkaban/repo/azkaban-solo-server/build/distributions/azkaban-solo-server-3.91.0-511-g6db75004 ./bin/shutdown-solo.sh方式三重新启动如果停止后想再次启动bashcd ~/azkaban/repo/azkaban-solo-server/build/distributions/azkaban-solo-server-3.91.0-511-g6db75004 ./bin/start-solo.sh电脑重启后Azkaban不会开机自启。重启电脑后需要手动启动打开 MobaXterm连接到 WSL执行启动命令bashcd ~/azkaban/repo/azkaban-solo-server/build/distributions/azkaban-solo-server-3.91.0-511-g6db75004 ./bin/start-solo.sh总结场景操作当前窗口✅ 可以关闭访问 Web UI浏览器打开http://localhost:8081查看是否运行jps | grep -i azkaban重启电脑后手动执行启动命令停止服务./bin/shutdown-solo.sh六、访问 Web UI⚠️ 注意使用https而不是 http。浏览器会提示证书风险点击高级 → 继续访问即可。打开浏览器访问http://localhost:8081字段值用户名azkaban密码azkaban七、常用命令操作命令启动 Azkabancd ~/azkaban/azkaban/azkaban-solo-server/build/distributions/azkaban-solo-server-* ./bin/start-solo.sh停止 Azkabancd 同上目录 ./bin/shutdown-solo.sh查看进程jps | grep -i azkaban查看日志cat logs/azkaban-solo-server.log服务管理命令操作solo-servertwo-server启动./bin/start-solo.shWeb:./bin/start-web.shExec:./bin/start-exec.sh停止./bin/shutdown-solo.shWeb:./bin/shutdown-web.shExec:./bin/shutdown-exec.sh查看状态jps | grep Azkabanjps | grep azkaban八、常见问题及解决问题解决方法class file has wrong version 55.0, should be 53.0切换到 Java 8sudo update-alternatives --config javanodeSetup下载失败 (403 Forbidden)修改azkaban-web-server/build.gradle设置download false端口 8081 被占用修改conf/azkaban.properties中的jetty.port8081为其他端口gradle: command not found检查环境变量source ~/.bashrc或重新配置 Gradle 路径编译时依赖下载慢在gradle.properties中添加阿里云镜像源九、安装完成标志当你能成功执行jps看到AzkabanSingleServer进程浏览器访问http://localhost:8081使用azkaban/azkaban成功登录看到 No Viewable Projects 和 Create Project 按钮时说明 Azkaban 已完全安装成功可以开始创建工作流项目了。快速测试1. 创建 Job 文件bash# 创建第一个 job cat one.job EOF typecommand commandecho this is job one EOF # 创建第二个 job依赖第一个 cat two.job EOF typecommand dependenciesone commandecho this is job two EOF2. 打包并上传将one.job和two.job打包成 zip 文件然后登录 Azkaban Web UI点击Create Project输入项目名和描述上传 zip 包点击Execute执行查看执行结果打包成 zip 文件方法一只打包指定的两个文件bashzip myflow.zip one.job two.job方法二打包当前目录下所有 .job 文件bashzip myflow.zip *.job方法三打包并包含子目录如果需要bashzip -r myflow.zip . -i *.job验证打包结果bash# 查看 zip 文件内容 unzip -l myflow.zip输出示例textArchive: myflow.zip Length Date Time Name --------- ---------- ----- ---- 36 2026-05-26 15:00 one.job 40 2026-05-26 15:00 two.job --------- ------- 76 2 files在 Azkaban 中使用将生成的myflow.zip上传到 Azkaban登录 Azkaban Web UIhttp://localhost:8081点击Create Project输入项目名称和描述上传myflow.zip文件点击Execute执行工作流其他常用 zip 命令操作命令打包多个指定文件zip archive.zip file1 file2 file3打包整个目录zip -r archive.zip directory/打包时排除某些文件zip archive.zip *.job -x temp.job添加密码保护zip -P 密码 archive.zip *.job解压 zip 文件unzip archive.zip查看 zip 内容不解压unzip -l archive.zip十、目录结构总结text/home/mumu/ ├── azkaban/ # 项目父目录 │ └── azkaban/ # Git 源码仓库 │ ├── gradlew # Gradle 包装器 │ ├── azkaban-solo-server/ # Solo Server 模块 │ │ └── build/distributions/ # 编译后的安装包 │ │ └── azkaban-solo-server-*/ # 可运行的服务目录 │ ├── azkaban-web-server/ # Web Server 模块 │ └── ... └── gradle-5.0-all.zip # Gradle 安装包现在你的 Azkaban 已经完全安装好了可以开始创建工作流项目。如果需要创建第一个工作流Job的教程随时告诉我。