Azkaban3.81.0介绍 作者:马育民 • 2025-12-01 16:14 • 阅读:10003 # 介绍 Azkaban 是一款**开源的分布式工作流调度工具**,由 LinkedIn 开发并捐赠给 Apache 社区(目前属于 Apache 顶级项目),核心用于**调度、监控和管理一系列关联的任务(Job)**,尤其适用于大数据场景下的离线任务编排(如 Hadoop、Spark、Hive 任务等),也可支持 Shell、Python、Java 等各类脚本/程序的定时/依赖执行。 ### 功能作用 解决“**任务依赖管理**”和“**定时调度**”两大核心问题,替代传统的 Linux Crontab(仅支持简单定时,无依赖管理和可视化监控),让复杂任务流(如“数据采集→清洗→建模→输出”)的执行、监控、故障排查更高效。 ### 应用场景 - 大数据离线批处理:Hive 数仓建模、Spark 离线计算、MapReduce 任务调度; - 数据ETL流程:数据抽取(Sqoop)→ 清洗(Python/Shell)→ 加载(HDFS/Hive); - 定时任务执行:日志归档、报表生成、数据库备份、接口数据同步; - 复杂依赖任务:多任务按顺序执行(A→B→C)、并行执行(A同时触发B和C)、条件执行(A成功则执行B,失败则执行C)。 ### 特点 1. **可视化界面**:提供 Web 控制台,支持任务流(Flow)的创建、编辑、调度、执行状态查看、日志查看,操作直观; 2. **强大的依赖管理**:支持线性依赖(A→B→C)、并行依赖(A触发B和C)、条件依赖(基于任务执行结果判断是否执行后续任务); 3. **灵活的调度策略**:支持一次性执行、定时调度(CRON 表达式)、依赖触发(上游任务完成后自动执行下游); 4. **丰富的任务类型支持**: - 内置任务:Shell、Java、Hadoop(HDFS/MapReduce/YARN)、Hive、Pig、Spark、Sqoop 等; - 自定义任务:通过插件扩展支持 Python、Flink、数据库脚本等; 5. **高可用性**:支持集群部署(主从节点),避免单点故障,保障任务流稳定执行; 6. **权限控制**:支持用户、角色、资源(任务流、项目)的权限管理,细粒度控制操作权限(查看、编辑、执行、管理); 7. **故障处理**:任务失败时支持自动重试、手动重跑(单个任务或整个流程)、邮件/短信告警通知; 8. **日志与审计**:记录任务执行日志、操作日志,支持故障追溯和审计; 9. **轻量化与易集成**:部署简单(支持单机/集群),可与 Hadoop 生态、数据库、监控工具(如 Prometheus)无缝集成。 # 主要概念 1. **Project(项目)**:任务流的组织单位,一个项目可包含多个任务流(Flow),用于隔离不同业务的任务(如“数仓建模项目”“日志分析项目”); 2. **Flow(任务流)**:一组存在依赖关系的任务(Job)的集合,定义了任务的执行顺序和依赖规则(如“ETL 流程”是一个 Flow,包含“数据抽取→清洗→加载”3 个 Job); 3. **Job(任务)**:最小执行单元,对应一个具体的操作(如“执行一个 Shell 脚本”“运行一个 Hive SQL”“提交一个 Spark 任务”),每个 Job 需指定任务类型、参数、依赖关系; 4. **Schedule(调度计划)**:为 Flow 配置的执行规则,支持 CRON 表达式(如 `0 0 * * *` 每天凌晨执行)、依赖触发(上游 Flow 执行成功后触发当前 Flow); 5. **Execution(执行实例)**:Flow 被触发后生成的一次执行记录,包含执行状态(准备中/运行中/成功/失败/取消)、执行时间、任务执行详情、日志等。 # 核心架构(双服务架构) Azkaban 3 采用「Web Server + Executor Server + MySQL」的架构,组件职责清晰,无冗余依赖: ### 核心组件 | 组件 | 核心职责 | |---------------------|--------------------------------------------------------------------------| | **Azkaban Web Server** | 1. 提供 Web 操作界面(用户交互、任务流配置、状态查看);2. 权限管理(用户/角色/资源授权);3. 调度计划管理(解析 CRON 表达式,触发任务执行);4. 向 Executor Server 下发执行指令,同步任务状态。 | | **Azkaban Executor Server** | 1. 接收 Web Server 的执行请求,实际运行任务(如执行 Shell 脚本、提交 Spark 任务);2. 实时上报任务执行状态(运行中/成功/失败);3. 记录任务执行日志,供 Web Server 查询。 | | **MySQL 数据库** | 存储元数据(核心数据):- 项目信息(项目名称、描述、所有者);- 任务流配置(.flow/.job 文件内容);- 调度计划(CRON 表达式、触发规则);- 执行历史(执行实例、任务状态、日志路径);- 用户权限(用户信息、角色、权限关联)。 | ### 工作流程 1. 开发人员编写任务流配置文件(.flow 或 .job),打包为 .zip 包; 2. 通过 Web Server 上传 .zip 包,创建项目并配置调度计划(如 CRON 定时); 3. Web Server 将项目信息、调度计划存储到 MySQL; 4. 调度时间到达(或手动触发),Web Server 从 MySQL 读取任务流配置,向 Executor Server 下发执行指令; 5. Executor Server 执行任务,实时将执行状态(如运行中、成功)写入 MySQL; 6. 开发/运维人员通过 Web Server 查看任务状态、日志,若失败则触发重试或告警。 # 总结 Azkaban 是一款**“轻量高效、易用性强”的分布式工作流调度工具**,核心优势在于“可视化操作+灵活依赖管理+大数据生态适配”,能快速解决离线任务流的调度、监控问题。 - 适合人群:大数据开发工程师、ETL 工程师、运维工程师(需要调度离线任务); - 核心场景:大数据离线批处理、ETL 流程、定时任务编排; - 选型建议:中小型数据团队、非超大规模任务流,优先选择 Azkaban(上手快、维护成本低);大型数据平台、复杂调度场景,可考虑 Airflow。 原文出处:http://www.malaoshi.top/show_1GW2KNcqAObQ.html