Apache Airflow或Apache Beam用于数据处理和作业调度

时间:2018-05-09 09:19:40

标签: pandas airflow apache-beam

我正在尝试提供有用的信息,但我远非数据工程师。

我目前正在使用python库pandas对我的数据执行一系列转换,这些数据有很多输入(目前是CSV和excel文件)。输出是几个excel文件。我希望能够通过并行计算执行计划的受监视批处理作业(我的意思是不像我正在做的那样使用pandas),每月一次。

我真的不知道Beam或Airflow,我快速阅读了文档,似乎两者都可以实现。我应该使用哪一个?

4 个答案:

答案 0 :(得分:21)

其他答案非常技术性且难以理解。之前我在您的位置上,所以我将以简单的方式进行解释。

气流可以做任何事情。它具有BashOperator和PythonOperator,这意味着它可以运行任何bash脚本或任何Python脚本。
这是一种在易于查看和使用的UI中组织(设置复杂的数据管道DAG),计划,监视,触发数据管道重新运行的方法。
此外,它很容易设置,并且所有内容都在熟悉的Python代码中。
以有组织的方式(即使用Airflow)进行管道传输意味着您不会浪费时间在各处调试一堆混乱的数据处理脚本。

Apache Beam是许多数据处理框架(Spark,Flink等)的包装。
目的是让您只学习Beam并可以在多个后端(Beam运行器)上运行。
如果您熟悉Keras和TensorFlow / Theano / Torch,则Keras及其后端之间的关系类似于Beam及其数据处理后端之间的关系。

Google Cloud Platform的Cloud Dataflow是在其上运行Beam的一个后端。他们称其为数据流运行器(https://beam.apache.org/documentation/runners/dataflow/

GCP的最新产品Cloud Composer是一种托管的Airflow实施即服务。

因此您可以:
 -调用Beam的手动气流实施
 -手动执行Airflow,在实例本身上进行数据处理(如果您的数据很小(或者您的实例足够强大),则可以在运行Airflow的计算机上处​​理数据。这就是为什么如果Airflow可以处理数据而使许多人感到困惑的原因) )
 -Cloud Dataflow中的托管Airflow即服务(Cloud Composer)调用作业

我的个人经历:
气流是轻量级的,不难学习(易于实现),应尽可能将其用于数据管道。
另外,由于许多公司都在寻找使用Airflow的经验,因此,如果您想成为一名数据工程师,则应该学习

答案 1 :(得分:6)

Apache Airflow不是数据处理引擎。

  

Airflow是一个以编程方式创作,安排和使用的平台   监控工作流程。

Cloud Dataflow是Google Cloud上的一项完全托管服务,可用于数据处理。您可以编写数据流代码,然后使用Airflow来计划和监视Dataflow作业。 Airflow还允许您在作业失败时重试您的作业(重试次数是可配置的)。如果要在Slack或电子邮件上发送警报,如果您的数据流管道出现故障,您还可以在Airflow中进行配置。

答案 2 :(得分:3)

Apache Airflow和Apache Beam在表面上看起来非常相似。两者都允许您组织一组处理数据的步骤,并确保步骤以正确的顺序运行并满足其依赖性。两者都允许您将步骤和相关性可视化为GUI中的有向无环图(DAG)。

但是,当您深入研究时,它们的功能和所支持的编程模型会有很大的差异。

气流是任务管理系统。 DAG的节点是任务,Airflow确保以正确的顺序运行它们,并确保仅在其依赖项任务完成后才启动一个任务。依赖任务不会同时运行,而只能一个接一个地运行。独立任务可以同时运行。

Beam是一个数据流引擎。 DAG的节点形成一个(可能是分支的)管道。 DAG中的所有节点都同时处于活动状态,它们将数据元素从一个传递到另一个,每个元素都对其进行一些处理。

两者的用例有些重叠,但是在很多事情中,只有其中之一能做得很好。

Airflow管理彼此依赖的任务。尽管这种依赖性可以包括一项任务,将数据传递给下一项任务,但这不是必需的。实际上,Airflow甚至都不在乎任务是做什么的,它只需要启动它们并查看它们是否完成即可。如果任务需要相互传递数据,则需要自己协调,告诉每个任务在何处读写数据,例如本地文件路径或某处的Web服务。任务可以由Python代码组成,但也可以是任何外部程序或Web服务调用。

在Beam中,您的步定义已与引擎紧密集成。您使用受支持的编程语言定义步骤,这些步骤在Beam流程中运行。如果可能的话,在外部过程中处理计算将非常困难*,并且肯定不是使用Beam的方式。您的步骤仅需担心它们正在执行的计算,而不必担心存储或传输数据。在不同步骤之间传输数据完全由框架处理。

在Airflow中,如果您的任务处理数据,则单个任务调用通常会对整个数据集进行一些转换。在Beam中,数据处理是核心接口的一部分,因此它实际上无法做其他任何事情。 Beam步骤的调用通常处理单个或几个数据元素,而不是整个数据集。因此,Beam还支持无限长度的数据集,这是Airflow本身无法解决的。

另一个区别是Airflow本身就是一个框架,而Beam实际上是一个抽象层。 Beam管道可以在Apache Spark,Apache Flink,Google Cloud Dataflow等上运行。所有这些都支持或多或少相似的编程模型。顺便说一下,Google还通过Google Cloud Compose将Airflow云化为一项服务。

* Apache Spark对Python的支持实际上是通过在子进程中运行完整的Python解释器来实现的,但这是在框架级别实现的。

答案 3 :(得分:0)

在气流方面,我的工作与您相同,并且取得了很好的效果。我对以下内容不太确定:Beam专注于机器学习,而气流满足您的任何需求。 最后,您可以使用kubernetes + airflow创建一个配置单元。