azkaban 任务调度工具
一、概述
1. 基础定义
Azkaban 是 LinkedIn 开源的轻量级离线批量工作流调度工具
配套 Hadoop/Hive 数仓使用,管理完整分层链路:ODS 同步 → DWD 清洗 → DWS 汇总 → ADS 指标报表
2. 核心定位
- 替代人工手动执行 shell、hive、spark 脚本,支持定时自动执行;
- 支持任务上下游依赖(上一层执行成功才运行下一层);
- 可视化 Web 页面:工作流编辑、运行监控、失败告警、日志查看;
- 轻量易部署,无复杂第三方依赖,中小企业离线数仓主流调度工具。
3. 适用场景
- 每日凌晨离线数仓全量分层调度;
- 定时同步业务数据到 ODS 层;
- 周期性统计市场指标、生成 ADS 报表;
- 数据清洗、小文件合并、HDFS 运维脚本定时执行。
[root@linux02 ~]# cd /opt/apps
[root@linux02 apps]# ll
drwxr-xr-x. 2 root root 4096 Aug 31 2021 azkaban-2.5.0
drwxr-xr-x. 10 root root 211 Aug 31 2021 azkaban-executor-2.5.0
drwxr-xr-x. 9 root root 204 Aug 31 2021 azkaban-web-2.55.0
1. azkaban-executor-2.5.0(执行器服务)
核心作用:真正跑任务的引擎
- 接收 Web 下发的工作流,实际执行 shell/hive/spark 等脚本任务;
- 监控每个 job 运行状态、收集运行日志;
- 任务执行完成后,把执行结果、状态写回 MySQL;
- 集群模式下可部署多台 executor,实现任务负载均衡。
启动命令
cd /opt/apps/azkaban-executor-2.5.0
bin/start-exec.sh
2. azkaban-web-2.5.0(Web 服务端)
核心作用:可视化操作后台,人机交互入口
- 提供网页 UI(默认端口 8081),浏览器访问管理任务;
- 负责项目管理:创建工作流、上传 job 文件、配置定时调度、权限管理;
- 接收用户手动执行、暂停、删除任务的操作;
- 记录任务执行日志、历史记录,从 MySQL 读取任务状态展示给页面;
- 不真正运行脚本,只会把任务下发给执行器。
# 启动命令进入web目录
cd /opt/apps/azkaban-web-2.5.0
bin/start-web.sh
3. 标准完整启动流程
# 1. 进入执行器目录,启动任务运行引擎
cd /opt/apps/azkaban-executor-2.5.0
bin/start-exec.sh
# 进入执行器bin目录
cd /opt/apps/azkaban-executor-2.5.0/bin
# 后台启动,输出日志到文件方便排错
[root@linux02 bin]# nohup ./azkaban-executor-start.sh > exec_run.log 2>&1 &
[1] 38283
# 等待10秒,让执行器完成注册
sleep 10
# 进入azkaban-web目录
cd /opt/apps/azkaban-web-2.5.0/bin
# 后台启动web服务
nohup ./azkaban-web-start.sh > web.log 2>&1 &
# 2. 进入web目录,启动网页管理后台
cd /opt/apps/azkaban-web-2.5.0
bin/start-web.sh
[root@linux02 ~]# jps
107957 Jps
104551 AzkabanExecutorServer
104635 AzkabanWebServer
启动后打开web页面 个人配置地址 https://linux02:8443/index 用户名 admin 密码 admin

4. 停止顺序(反过来)
关闭要先关 web,再关 executor:
# 1. 先关网页服务
[root@linux02 bin]# cd /opt/apps/azkaban-web-2.5.0
[root@linux02 azkaban-web-2.5.0]# bin/azkaban-web-shutdown.sh
killing AzkabanWebServer
# 2. 再关执行器
[root@linux02 azkaban-web-2.5.0]# cd /opt/apps/azkaban-executor-2.5.0
[root@linux02 azkaban-executor-2.5.0]# bin/azkaban-executor-shutdown.sh
原因:先停 Web 就不会有新任务提交,再关闭执行器,避免任务中途被强制中断。
5. azkaban-2.5.0(数据库脚本包 azkaban-db)
核心作用:初始化 MySQL 元数据表
- 里面存放建表 SQL 脚本(
create-all-sql-2.5.0.sql); - Azkaban 所有数据(项目、任务、定时、执行记录、日志)都存在 MySQL;
- 部署第一步必须先执行这个 SQL,创建配套数据库和 20 多张业务表;
- 不需要启动,仅初始化时使用,运行时不会后台常驻。
使用方式
# 登录MySQL执行脚本
mysql -uroot -p
source /opt/apps/azkaban-2.5.0/create-all-sql-2.5.0.sql;
三者完整协作流程
- 先执行
azkaban-2.5.0的 SQL 初始化数据库; - 启动
azkaban-web网页服务,浏览器上传工作流、配置定时; - 触发任务时 Web 把任务信息存入 MySQL;
azkaban-executor轮询数据库拿到待执行任务,运行脚本;- Executor 执行完毕,更新任务状态、日志到 MySQL;
- Web 从数据库读取执行结果,在页面展示给用户。
补充常见问题
- 只启动 web 不启动 executor:任务只会显示排队,永远不会执行;
- 只启动 executor 不启动 web:没有网页无法上传、调度任务;
- 不执行 azkaban-db 脚本:web/executor 启动直接报错,找不到数据表。
6. 创建job
、核心规则(Flow1.0 你现在用的版本)
- 一个 zip = 一个工作流 Flow,里面可以存放多个.job任务文件;
- 每个 job 可以配置
dependencies=任务名实现先后执行、并行执行; - 多任务 zip:分层链路(ODS→DWD→DWS)、多阶段计算、前后有依赖,推荐打包在一起统一调度。
一、整体流程
- 编写 Hive 执行脚本(
.sh) - 编写 Azkaban 工作流配置文件(
.job) - 两个文件压缩为 zip 包
- 上传到 Azkaban 新建项目
- 手动运行 / 配置定时调度
二、步骤 1:编写执行脚本 ods_to_dws.sh
脚本内容
#!/bin/bash
# 指定Hive客户端路径,根据你的机器修改
HIVE_BIN=/opt/apps/hive-3.1.2/bin/hive
# Hive SQL:ODS插入DWS,示例语句,替换成你真实的表逻辑
SQL="
INSERT OVERWRITE TABLE dws.market_day_wide
SELECT
id,
goods_name,
price,
stat_date
FROM ods.ods_goods_info
WHERE stat_date = '${dt}';
"
# 执行SQL,dt为日期参数
${HIVE_BIN} -e "${SQL}"
说明:
INSERT OVERWRITE:覆盖 DWS 当日分区;如果是追加改用INSERT INTO${dt}是日期参数,调度时传入执行日期
三、步骤 2:编写工作流配置文件 ods_dws.job
job 文件是 Azkaban 识别任务的核心,文件名后缀必须 .job
# 任务名称
type=command
# 执行脚本
command=sh ods_to_dws.sh ${dt}
# 失败重试次数
retries=1
# 重试间隔(毫秒)
retry.backoff=30000
# 任务描述
description=ODS商品数据同步至DWS日宽表
# 任务超时时间(毫秒,2小时)
timeout=7200000
四、步骤 3:打包压缩(关键!只能 zip,不能 rar/tar)
- 新建空文件夹,放入上面两个文件:
- ods_to_dws.sh
- ods_dws.job
- 进入文件夹执行打包命令:
mkdir xinfadi_ods2dwd
cd xinfadi_ods2dwd
# 把上面两个文件粘贴到此目录
# 打包zip(必须zip,不要嵌套文件夹)
zip xinfadi_ods2dwd.zip ods2dwd_xinfadi.sh ods2dwd_xinfadi.job
注意:不要嵌套文件夹!zip 根目录直接是两个文件,否则 Azkaban 读不到 job
五、步骤 4:Azkaban 页面上传创建工作流
- 右上角绿色按钮
Create Project
- Project name:自定义,比如
ods_to_dws_sync -
Description:ODS 层数据同步 DWS 层 Hive 任务,点击 Create
-
进入项目详情页,右上角 Upload 上传刚才的
ods_dws_sync.zip -
上传完成后,页面会加载出工作流
ods_dws
六、步骤 5:手动执行任务(测试)
- 点击工作流名称
ods_dws - 右上角 Execute Flow
- 弹窗参数
dt填写日期,例如2026-06-24,点击 Execute - 跳转到执行页面,查看运行日志:
- 绿色 = 执行成功;红色 = 失败,点开 Logs 查看 Hive 报错(表不存在、字段不匹配、权限等)
七、步骤 6:配置定时自动调度(每日凌晨同步)
- 回到项目工作流页面,点击 Schedule
- 设置调度规则:
- 类型:Cron
- 示例每日凌晨 2 点执行:
0 0 2 * * ? - 传入参数
dt:调度执行当天日期,Azkaban 自动传参,无需手动填写 - 保存定时,任务会每天自动跑 ODS→DWS 同步