欢迎来到安国润的个人网站


azkaban 任务调度工具

一、概述

1. 基础定义

Azkaban 是 LinkedIn 开源的轻量级离线批量工作流调度工具

配套 Hadoop/Hive 数仓使用,管理完整分层链路:ODS 同步 → DWD 清洗 → DWS 汇总 → ADS 指标报表

2. 核心定位

  1. 替代人工手动执行 shell、hive、spark 脚本,支持定时自动执行;
  2. 支持任务上下游依赖(上一层执行成功才运行下一层);
  3. 可视化 Web 页面:工作流编辑、运行监控、失败告警、日志查看;
  4. 轻量易部署,无复杂第三方依赖,中小企业离线数仓主流调度工具。

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(执行器服务)

核心作用:真正跑任务的引擎

  1. 接收 Web 下发的工作流,实际执行 shell/hive/spark 等脚本任务
  2. 监控每个 job 运行状态、收集运行日志;
  3. 任务执行完成后,把执行结果、状态写回 MySQL;
  4. 集群模式下可部署多台 executor,实现任务负载均衡。
启动命令
cd /opt/apps/azkaban-executor-2.5.0
bin/start-exec.sh

2. azkaban-web-2.5.0(Web 服务端)

核心作用:可视化操作后台,人机交互入口

  1. 提供网页 UI(默认端口 8081),浏览器访问管理任务;
  2. 负责项目管理:创建工作流、上传 job 文件、配置定时调度、权限管理;
  3. 接收用户手动执行、暂停、删除任务的操作;
  4. 记录任务执行日志、历史记录,从 MySQL 读取任务状态展示给页面;
  5. 不真正运行脚本,只会把任务下发给执行器。
#  启动命令进入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

1782311520190

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 元数据表

  1. 里面存放建表 SQL 脚本(create-all-sql-2.5.0.sql);
  2. Azkaban 所有数据(项目、任务、定时、执行记录、日志)都存在 MySQL;
  3. 部署第一步必须先执行这个 SQL,创建配套数据库和 20 多张业务表;
  4. 不需要启动,仅初始化时使用,运行时不会后台常驻。

使用方式

# 登录MySQL执行脚本
mysql -uroot -p
source /opt/apps/azkaban-2.5.0/create-all-sql-2.5.0.sql;

三者完整协作流程

  1. 先执行 azkaban-2.5.0 的 SQL 初始化数据库;
  2. 启动 azkaban-web 网页服务,浏览器上传工作流、配置定时;
  3. 触发任务时 Web 把任务信息存入 MySQL;
  4. azkaban-executor 轮询数据库拿到待执行任务,运行脚本;
  5. Executor 执行完毕,更新任务状态、日志到 MySQL;
  6. Web 从数据库读取执行结果,在页面展示给用户。

补充常见问题

  1. 只启动 web 不启动 executor:任务只会显示排队,永远不会执行;
  2. 只启动 executor 不启动 web:没有网页无法上传、调度任务;
  3. 不执行 azkaban-db 脚本:web/executor 启动直接报错,找不到数据表。

6. 创建job

、核心规则(Flow1.0 你现在用的版本)

  1. 一个 zip = 一个工作流 Flow,里面可以存放多个.job任务文件
  2. 每个 job 可以配置 dependencies=任务名 实现先后执行、并行执行;
  3. 多任务 zip:分层链路(ODS→DWD→DWS)、多阶段计算、前后有依赖,推荐打包在一起统一调度。

一、整体流程

  1. 编写 Hive 执行脚本(.sh
  2. 编写 Azkaban 工作流配置文件(.job
  3. 两个文件压缩为 zip 包
  4. 上传到 Azkaban 新建项目
  5. 手动运行 / 配置定时调度

二、步骤 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)

  1. 新建空文件夹,放入上面两个文件:
  2. ods_to_dws.sh
  3. ods_dws.job
  4. 进入文件夹执行打包命令:
mkdir xinfadi_ods2dwd
cd xinfadi_ods2dwd
# 把上面两个文件粘贴到此目录
# 打包zip(必须zip,不要嵌套文件夹)
zip xinfadi_ods2dwd.zip ods2dwd_xinfadi.sh ods2dwd_xinfadi.job

注意:不要嵌套文件夹!zip 根目录直接是两个文件,否则 Azkaban 读不到 job

五、步骤 4:Azkaban 页面上传创建工作流

  1. 右上角绿色按钮

Create Project

  • Project name:自定义,比如 ods_to_dws_sync
  • Description:ODS 层数据同步 DWS 层 Hive 任务,点击 Create

  • 进入项目详情页,右上角 Upload 上传刚才的 ods_dws_sync.zip

  • 上传完成后,页面会加载出工作流 ods_dws

六、步骤 5:手动执行任务(测试)

  1. 点击工作流名称 ods_dws
  2. 右上角 Execute Flow
  3. 弹窗参数 dt 填写日期,例如 2026-06-24,点击 Execute
  4. 跳转到执行页面,查看运行日志:
  5. 绿色 = 执行成功;红色 = 失败,点开 Logs 查看 Hive 报错(表不存在、字段不匹配、权限等)

七、步骤 6:配置定时自动调度(每日凌晨同步)

  1. 回到项目工作流页面,点击 Schedule
  2. 设置调度规则:
  3. 类型:Cron
  4. 示例每日凌晨 2 点执行:0 0 2 * * ?
  5. 传入参数 dt:调度执行当天日期,Azkaban 自动传参,无需手动填写
  6. 保存定时,任务会每天自动跑 ODS→DWS 同步