Apache Beam vs. Apache Airflow

Apache Beam vs. Apache Airflow

精选文章moguli202025-03-03 11:12:2215A+A-

背景

随着分布式数据处理技术不断发展,新的分布式数据处理技术也不断被提出,业界涌现出了越来越多的分布式数据处理框架,从最早的Hadoop MapReduce,到Apache Spark,Apache Storm,以及Apache Flink,Apache Apex等。随之诞生了Apache Airflow 与 Apache Beam,从表面上看,Apache Airflow 和 Apache Beam 可能看起来很相似,两者都旨在组织编排数据的处理流程,以确保流程的准确性,本文将介绍一下这两个工具。


Apache Beam

介绍

Apache Beam(原名Google DataFlow)是Google在2016年2月份贡献给Apache基金会的Apache孵化项目,被认为是继MapReduce,GFS和BigQuery等之后,Google在大数据处理领域对开源社区的又一个非常大的贡献。Apache Beam的主要目标是统一批处理和流处理的编程范式,为无限,乱序,web-scale的数据集处理提供简单灵活,功能丰富以及表达能力十分强大的SDK,且具有对 Java、Python、Go 和 SQL 的 API 支持。



特点

  • 统一数据源:集成了Clickhouse、cassandra、kudu等大量数据源。
  • 统一编程模型:Beam统一了批处理和流式处理,抽象出统一的 API 接口。
  • 统一大数据引擎:现在支持性最好的是 flink,spark,dataflow 还有其它的大数据引擎接入进来
  • 可移植的:可以支持多种执行环境,包括Apache Apex、Apache Flink、Apache Spark和谷歌Cloud Dataflow等;
  • 可扩展性:Apache Beam 是具有可扩展性的,零部件都可以重塑。
  • 多语言开发: Beam 支持 java,Python,go,Scala 语言



架构

基础架构

Apache Beam主要由Beam SDK和Beam Runner组成,Beam SDK定义了开发分布式数据处理任务业务逻辑的API接口,生成的的分布式数据处理任务Pipeline交给具体的Beam Runner执行引擎。Apache Beam目前支持的API接口是由Java语言实现的,Python版本的API正在开发之中。Apache Beam支持的底层执行引擎包括Apache Flink,Apache Spark以及Google Cloud Platform等。

Apache Beam核心的主要有两层:

  • Pipeline构建层:在Pipeline构建层,针对不同的编程语言,构建一组用于定义Pipeline相关抽象,提供编程API,这一层被称为Beam SDKs。最终的用户(具有不同编程语言技能的人员)可以基于这些抽象的Beam SDK来构建数据处理Pipeline。
  • Runner适配层:Runner适配层,主要是用来对接底层的计算引擎,用来执行上层用户开发好的Pipeline程序。

编程模型

Beam的编程模型是Google的工程师从MapReduce, FlumeJava, 和Millwheel等多个大数据处理项目中抽象出来的,这个编程模型主要包括如下几个核心概念:

  • PCollection:数据集,代表了将要被处理的数据集合,可以是有限的数据集,也可以是无限的数据流。
  • PTransform:计算过程,代表了将输入数据集处理成输出数据集中间的计算过程,
  • Pipeline:管道,代表了处理数据的执行任务,可视作一个有向无环图(DAG),PCollections是节点,Transforms是边。
  • PipelineRunner:执行器,指定了Pipeline将要在哪里,怎样的运行。



Apache Airflow

介绍

Apache Airflow 是一个由开源社区维护的,专职于调度和监控工作流的 Apache 项目,于2014年10月由 Airbnb 开源,2019年1月从 Apache 基金会毕业,成为新的 Apache 顶级项目。airflow 将workflow编排为tasks组成的DAGs,调度器在一组workers上按照指定的依赖关系执行tasks。同时,airflow 提供了丰富的命令行工具和简单易用的用户界面以便用户查看和操作,并且airflow提供了监控和报警系统。

特点

Airflow中,创建和维护工作流的页面非常丰富,以下这些特点可以让它从竞争对手中脱颖而出:

  • 动态性:在 Python 编程语言的帮助下,管道可以实现动态实例化。
  • 可伸缩性:由于Airflow的模块化架构(Modular Architecture)和编排能力,员工的数量可以根据用户的要求进行伸缩(增加或减少)。
  • 可扩展性:Airflow 能够定义自定义运算(Custom Operator),并与第三方工具(如 StatsD、MySQL 等)集成。
  • 简洁性:借助 Jinja(Python 的 Web 模板引擎),可以在Airflow中进行参数化(Parametrization)。同时还具备易于学习的用户界面。

架构

基本概念

  • DAGs:即有向无环图(Directed Acyclic Graph),将所有需要运行的tasks按照依赖关系组织起来,描述的是所有tasks执行顺序。
  • Operators:Operator将要在每个任务中执行的操作封装在DAG中。 Airflow有大量的内置操作员,它们可以执行特定任务,其中一些特定于平台。 此外,还可以创建自己的自定义运算符。。其中,airflow内置了很多operators,如BashOperator 执行一个bash 命令,PythonOperator 调用任意的Python 函数,EmailOperator 用于发送邮件,HTTPOperator 用于发送HTTP请求, SqlOperator 用于执行SQL命令等等,同时,用户可以自定义Operator,这给用户提供了极大的便利性。
  • Tasks:Task 是 Operator的一个实例,也就是DAGs中的一个node。
  • Task Instance:task的一次运行。Web 界面中可以看到task instance 有自己的状态,包括"running", "success", "failed", "skipped", "up for retry"等。
  • Task Relationships:DAGs中的不同Tasks之间可以有依赖关系,如 Task1 >> Task2,表明Task2依赖于Task2了。

基本组件

Airflow 是一个工作流调度器(Workflow Schedule)和管理程序,主要用于开发和维护数据管道。这些任务以有向无环图 (DAG) 的形式表示,Airflow 架构的主要组件。

  • scheduler(调度器):调度器有两个任务触发计划的 DAG以及将任务提交给执行器运行,调度器是一个多线程的 Python 进程,用 DAG 信息来调度任务,将每个 DAG 的信息(DAG Information)存储在元数据数据库中。
  • executor(执行器):执行器是处理正在运行的任务的机制。Airflow 有很多执行器,主要有 顺序执行器(Sequential Executor)、本地执行器(Local Executor) 和 调试执行器(Debug Executor),以及用于复杂任务的远程执行器(Remote Executor),例如 Celery执行器、Dask 执行器、Kubernetes执行器和 CeleryKubernetes 执行器。
  • webserver(WEB服务器):WEB服务器是一个简单的用户界面,可在日志的帮助下检查、触发和调试 DAG 的工作,通过显示任务状态(Task States),帮助用户与元数据数据库交互。
  • DAG Directory:由scheduler和executor(以及executor所有的worker)读取
  • Metadata Database:元数据数据库支持其他组件之间的交互,并存储其他三个组件(WEB服务器、调度器和执行器)存储的所有状态。所有进程在这个数据库中进行读写。SQLAlchemy 支持的数据库管理系统(如 MySQL 和 PostgresDB)可用于元数据数据库。


总结

Airflow 和 Apache Beam 都可以归类为“工作流管理器”工具。然而,Airflow 注重编排,由于被设计为批处理编排器所以对流处理支持不是特别好。Apache Beam本身不是一个流式处理平台,而是一个统一的编程框架,它提供了开源的、统一的编程模型,帮助你创建自己的数据处理流水线,让用户可以不再关心具体的执行环境或者执行引擎,但是每当底层执行引擎(Spark、Flink、Samza 等)的功能发生变化时,必须更新 Beam 模型。Airflow 在某种意义上不是 Beam 的竞争对手 , 相反,它们是可以相互配合,Airflow 可用于调度和触发 Beam 作业,以及它触发的其他任务。

点击这里复制本文地址 以上内容由莫古技术网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

莫古技术网 © All Rights Reserved.  滇ICP备2024046894号-2