Azkaban单机版从零部署实战:避坑指南与快速上手

张开发
2026/5/4 4:24:59 15 分钟阅读
Azkaban单机版从零部署实战:避坑指南与快速上手
1. 为什么选择Azkaban单机版Azkaban作为LinkedIn开源的批量工作流任务调度系统在大数据领域已经服务了十几年。我第一次接触它是在2016年当时团队需要一个轻量级的任务调度工具来管理日常的Hadoop作业。相比其他调度系统Azkaban最大的优势就是简单易用——不需要复杂的集群部署单机版就能满足开发和测试需求。单机版特别适合以下场景个人学习大数据工作流调度开发环境快速验证工作流逻辑小团队内部测试使用我见过不少新手一上来就想部署完整集群版结果在配置多节点通信时就被劝退了。其实对于大多数初期需求单机版完全够用。它集成了Web Server和Executor Server所有组件都在一个进程里运行省去了复杂的网络配置。2. 环境准备那些官方文档没告诉你的细节2.1 系统环境检查官方文档只说需要JDK和MySQL但实际部署时会遇到各种环境问题。建议先执行以下检查# 检查Java版本需要1.8 java -version # 检查MySQL版本5.7 mysql --version # 检查git是否安装 git --version最近帮同事部署时就遇到一个坑他的机器装了OpenJDK 11结果编译时出现不兼容问题。Azkaban 3.x系列对JDK版本比较敏感推荐使用Oracle JDK 1.8。如果必须用OpenJDK建议选择8或11的LTS版本。2.2 MySQL配置要点Azkaban需要MySQL存储元数据但官方安装包里的建表脚本有个小坑-- 官方脚本默认用的latin1编码 CREATE DATABASE azkaban DEFAULT CHARACTER SET latin1;我强烈建议改成utf8mb4否则后面中文任务名会显示乱码CREATE DATABASE azkaban DEFAULT CHARACTER SET utf8mb4;另外记得给Azkaban账号授权时加上host限制GRANT ALL PRIVILEGES ON azkaban.* TO azkabanlocalhost IDENTIFIED BY 你的密码;3. 源码编译避开网络依赖的坑3.1 下载源码的正确姿势官网下载页面经常抽风我习惯用GitHub的镜像仓库git clone https://github.com/azkaban/azkaban.git cd azkaban git checkout 3.90.0 # 使用稳定版本3.2 解决Gradle编译问题编译时最常遇到的就是依赖下载失败。修改build.gradle是必须的buildscript { repositories { maven { url https://maven.aliyun.com/repository/public } } } allprojects { repositories { maven { url https://maven.aliyun.com/repository/public } } }但即使这样编译web模块时还是可能卡在nodejs下载。这时候需要手动操作到nodejs官网下载对应版本如v8.10.0解压后设置环境变量export NODE_HOME/path/to/node-v8.10.0 export PATH$NODE_HOME/bin:$PATH修改azkaban-web-server/build.gradletask nodeSetup(type: NodeSetup) { enabled false # 关闭自动下载 }3.3 编译加速技巧加上-x test参数跳过测试能节省大量时间./gradlew build installDist -x test编译成功后关键产出在azkaban-solo-server/build/distributions/*.tar.gz单机版包azkaban-web-server/build/distributions/*.tar.gzWeb界面4. 单机版部署实战4.1 目录结构规划我习惯的部署目录结构/opt/azkaban ├── solo-server # 解压后的单机版 ├── conf # 自定义配置 └── logs # 日志目录解压后先修改关键配置# conf/azkaban.properties default.timezoneAsia/Shanghai # 时区设置 database.typemysql mysql.port3306 mysql.hostlocalhost mysql.databaseazkaban mysql.userazkaban mysql.password你的密码4.2 启动与排错启动命令必须在solo-server目录执行cd /opt/azkaban/solo-server bin/start-solo.sh常见启动错误及解决方案数据库连接失败检查mysql.user是否有localhost权限端口冲突修改conf/azkaban.properties中的jetty.port时区问题确保MySQL和Azkaban使用相同时区4.3 安全加固建议默认账号azkaban/azkaban一定要改登录后进入User Management修改admin密码创建个人账号并分配权限5. 进阶使用技巧5.1 邮件报警配置在azkaban.properties中添加mail.sender你的发件邮箱 mail.hostsmtp.xxx.com mail.user邮箱账号 mail.password邮箱密码然后在工作流设置中配置失败通知notify.emails接收人邮箱 failure.emails接收人邮箱5.2 日志管理默认日志会无限增长需要定期清理。可以通过crontab设置定时任务0 0 * * * find /opt/azkaban/logs -name *.log.* -mtime 7 -exec rm {} \;5.3 资源限制单机版默认会吃掉大量内存可以通过以下JVM参数控制executor.maxThreads10 # 并发任务数 jetty.maxThreads50 # Web请求线程数6. 常见问题解决方案QWeb界面能打开但登录失败A检查数据库中的users表密码是MD5加密的。可以用MySQL命令重置UPDATE users SET passwordMD5(新密码) WHERE usernameazkaban;Q任务一直处于PREPARING状态A通常是Executor没有正常启动。检查日志tail -f /opt/azkaban/logs/azkaban-execserver.logQ上传ZIP工作流失败A可能是文件权限问题尝试chmod 755 /opt/azkaban/solo-server/web

更多文章