一 背景
数仓建设过程中,随着业务发展, ETL 任务调度越来越多,并且这些任务的形态多种多样。怎么样让大量的 ETL 任务准确的完成调度而不出现问题,甚至在任务调度执行中出现错误的情况下,任务能够完成自我恢复甚至执行错误告警与完整的日志查询。因此一个好的大数据任务调度平台尤为重要。
二 常见开源大数据任务平台
2.1 Airflow
Apache Airflow是一个高度可扩展的、基于Python编写的开源工作流管理系统,它通过DAG(有向无环图)来定义、安排和监控数据处理管道。Airflow支持各种数据处理库和系统,如Spark、Hive、Pig等,并具有强大的调度能力和丰富的插件生态。
Apache Airflow 官网:https://airflow.apache.org
- 优点:
- 基于Python编程,通过编写DAG(有向无环图)来定义工作流,灵活性高,易于扩展和集成。
- 开源社区活跃,有大量的插件支持各种数据处理工具,如Spark、Hive、Pig等。
- 易于进行版本控制和CI/CD流程,因为DAG是代码形式存在。
- 高度可定制化,能够满足复杂的业务逻辑需求。
- 提供了完善的监控界面和强大的可视化功能。
- 缺点:
- 学习曲线较陡峭,尤其是对于非Python开发者而言。
- 对集群管理和资源分配方面的控制不如某些专门设计的大数据调度框架精细。
- 在大规模部署时,需要额外配置和维护工作以保证高可用性和性能。
2.2 Azkaban
Azkaban是由LinkedIn开发的一款轻量级的工作流程管理器,主要用于Hadoop作业调度。它提供了一个Web用户界面用于上传和调度工作流,每个工作流由一系列依赖的任务组成。
Azkaban 官网:https://azkaban.github.io
- 优点:
- 界面友好,提供Web UI用于任务提交、监控和管理。
- 轻量级,适合小型到中型规模的任务调度。
- 使用properties文件或JSON格式定义工作流,相对简单易用。
- 缺点:
- 功能相比Airflow略显单一,对复杂依赖关系的支持可能不足。
- 高可用性和扩展性方面相较于Airflow、DolphinScheduler等稍弱,需要额外配置才能实现HA。
- 编排能力和灵活性有限,不支持代码级别的任务定义和重用。
2.3 Oozie
Oozie是Apache的一个项目,专门设计用来管理和协调运行在Hadoop集群上的工作流作业。Oozie与Hadoop生态系统紧密集成,能够直接调度MapReduce、Pig、Hive等作业。
Apache Oozie官网:https://oozie.apache.org
- 优点:
- 专为Hadoop生态系统设计,深度集成Hadoop组件,如MapReduce、Pig、Hive等。
- 支持多种作业类型和动作协调器,适用于Hadoop集群内的工作流调度。
- 缺点:
- 非常依赖Hadoop环境,对其他技术栈的支持有限。
- XML配置方式不够直观,维护成本较高。
- 扩展性和灵活性较差,不适合处理大量非Hadoop原生的任务。
2.4 Luigi
Luigi是由 Spotify 开发的Python库,用于构建复杂的批处理任务管道。Luigi允许用户创建依赖关系并可视化地跟踪进程,但不像Airflow那样提供完整的UI管理和监控。
Luigi 官网:https://github.com/spotify/luigi
- 优点:
- 同样基于Python编写,且结构清晰,适合构建复杂的数据管道。
- 自带了一套简单的API,方便构建依赖性强的工作流。
- 设计简洁,容易上手。
- 缺点:
- 相比Airflow,社区活跃度和生态相对较小,插件和第三方支持较少。
- 不如Airflow那样适合大规模生产环境和企业级应用。
2.5 DolphinScheduler
DolphinScheduler是一款分布式的大数据工作流调度系统,提供了可视化的 DAG 编排界面,支持多租户、高可用及资源隔离。它的设计理念注重易用性和稳定性,适用于多种大数据任务场景。
DolphinScheduler 官网:https://dolphinscheduler.apache.org/zh-cn
- 优点:
- 分布式架构设计,支持多Master高可用,以及多Worker负载均衡。
- 支持多种任务类型和自定义任务,并提供了友好的Web UI。
- 可视化程度高,支持拖拽式任务编排。
- 缺点:
- 相比Airflow,社区成熟度较低。
三 选型推荐
特性/平台 | Apache Airflow | Azkaban | Luigi | Oozie | DolphinScheduler |
---|---|---|---|---|---|
开发语言 | Python | Java | Python | Java | Java |
定义工作流方式 | 通过Python代码构建DAG(有向无环图) | XML或JSON配置文件 | Python类和方法 | Hadoop Workflow XML | JSON格式配置,支持可视化拖拽 |
生态与集成 | 广泛的社区支持,丰富的插件库,可集成众多数据处理工具如Spark、Hive等 | 基础作业类型,对Hadoop生态系统友好 | 集成了常见的数据处理框架,但生态不如Airflow丰富 | 紧密集成Hadoop组件,包括MapReduce, Pig, Hive等 | 支持多种计算引擎和数据存储系统 |
易用性 | 中高,适合熟悉Python且需要复杂工作流逻辑的用户 | 中等,简单易用的Web UI,适用于小型到中型项目 | 中等,基于代码的任务定义使得逻辑清晰,学习成本相对较低 | 中低,XML配置较为繁琐 | 中高,提供友好的Web界面和可视化编排功能 |
扩展性与灵活性 | 高,通过编写自定义Operator可实现高度定制化 | 较低,扩展性和灵活性一般 | 中等,可通过扩展Python模块增加功能 | 中等,可以通过扩展Action来增加新的作业类型 | 高,分布式架构设计,支持多租户和动态资源分配 |
社区活跃度 | 非常活跃,企业级应用广泛 | 相对稳定,更新频率较慢 | 活跃度低于Airflow,主要用于特定场景 | 相对成熟,更新迭代速度适中 | 持续发展,社区在不断壮大 |
高可用与容错 | 可通过Kubernetes或其他集群管理工具实现高可用部署 | 需要额外配置以实现高可用 | 需外部机制保证服务稳定性 | 提供HA模式 | 内置支持高可用及故障转移 |
运维监控 | 提供全面的Web UI监控和调试工具 | 提供基础的Web监控界面 | 提供命令行工具查看状态 | 提供Web控制台进行监控和管理 | 提供详细的仪表板和报警机制 |
如果您的团队熟悉Python且需要高度灵活和可扩展的工作流解决方案,Apache Airflow是一个很好的选择;
Apache Oozie 自我建议不用使用,自我感觉非常难用;
Apache DolphinScheduler 是一个分布式和可扩展的开源工作流协调平台,具有强大的DAG可视化界面,非常推荐除Python团队以外的人员使用。