Apache Beam 的编程模型

Apache Beam 是一种统一的开源模型,用于定义批量数据和流式数据的并行处理流水线。Apache Beam 编程模型简化了大规模数据处理的机制。借助一种 Apache Beam SDK,您可以构建一个程序来定义流水线。然后,Apache Beam 支持的一种分布式处理后端(如 Dataflow)会执行该流水线。此模型使您可以专注于对数据处理作业进行逻辑组合,而不是对并行处理进行物理编排。您可以专注于您需要作业执行的任务,而不是执行作业的方式。

Apache Beam 模型可提供有用的抽象,这些抽象使您无需去操心分布式处理的低层细节,例如协调各个工作器、分片数据集和其他此类任务。 Dataflow 可全面管理这些低层细节。

概念

本部分介绍基本概念的摘要。在 Apache Beam 网站上,Apache Beam 编程指南介绍了使用 Apache Beam SDK 构建流水线的基本概念。

基本概念

流水线
流水线封装了读取输入数据、转换输入数据和写入输出数据所涉及的一系列计算。输入来源和输出接收器的类型可以相同,也可不同,以便于将数据从一种格式转换为另一种格式。Apache Beam 程序首先构建一个 Pipeline 对象,然后基于该对象创建流水线的数据集。每条流水线都代表一个可重复的作业。
PCollection
PCollection 表示一个潜在分布的多元素数据集(用作流水线的数据)。Apache Beam 转换使用 PCollection 对象作为流水线中每个步骤的输入和输出。PCollection 可以保存固定大小的数据集,或来自持续更新数据源的无界限数据集。
转换
转换表示用于转换数据的处理操作。转换将一个或多个 PCollection 作为输入,对该集合中的每个元素执行您指定的操作,然后生成一个或多个 PCollection 作为输出。转换可以执行几乎任何类型的处理操作,包括对数据执行数学计算、将数据从一种格式转换为另一种格式、将数据分组在一起、读取和写入数据、过滤数据以仅输出所需的元素或将数据元素组合成单个值。
ParDo
ParDo 是 Apache Beam SDK 中的核心并行处理操作,对输入 PCollection 中的每个元素调用用户指定的函数。ParDo 将零个或多个输出元素收集到一个输出 PCollection 中。ParDo 转换独立且可能并行地处理元素。
管道 I/O
借助 Apache Beam I/O 连接器,您可以将数据读入流水线,并从流水线中写入输出数据。I/O 连接器由源和接收器组成。所有 Apache Beam 源和接收器均进行转换,使流水线可以处理来自多种不同数据存储格式的数据。您还可以编写自定义 I/O 连接器。
聚合
聚合是从多个输入元素计算某个值的过程。Apache Beam 中聚合的主要计算模式是使用公共键和窗口对所有元素进行分组。然后,它使用关联和交换操作组合每组元素。
用户定义的函数 (UDF)
Apache Beam 中的某些操作允许将执行用户定义的代码作为配置转换的一种方式。对于 ParDo,用户定义的代码指定要应用于每个元素的操作;对于 Combine,它指定值的组合方式。流水线可能包含采用与您的运行程序语言不同的语言编写的 UDF。流水线也可能包含采用多种语言编写的 UDF。
运行程序
运行程序是接受流水线并执行它的软件。大多数运行程序是用于大规模并行大数据处理系统的翻译器或适配器。 其他运行程序用于本地测试和调试。

高级概念

事件时间
数据事件发生的时间,由数据元素本身的时间戳决定。这与在流水线中的任何阶段处理实际数据元素的时间形成对比。
数据选取
数据选取可对无界限集合进行分组操作,方法是根据各个元素的时间戳,将集合划分为有界限集合窗口。数据选取函数告诉运行程序如何将元素分配给初始窗口,以及如何合并分组元素的窗口。 Apache Beam 允许您定义不同类型的窗口或使用预定义的数据选取函数。
水印
Apache Beam 会跟踪水印(这是一个系统概念,指示了某个窗口中的所有数据预计会在何时到达流水线)。Apache Beam 会跟踪水印,因为不能保证数据会按时间顺序或以可预测的时间间隔到达流水线。此外,也不能保证数据事件将以它们的生成顺序出现在流水线中。
触发器
触发器确定在数据到达时发送聚合结果的时间。对于有界限数据,结果会在处理完所有输入后发送。对于无界限数据,结果会在水印超过窗口末尾后发送,表明系统认为该窗口的所有输入数据都已处理完毕。Apache Beam 提供了几个预定义的触发器,您可以组合使用它们。

后续步骤

如需详细的说明,请参阅 Apache Beam 网站上的 Apache Beam 编程指南

Apache Beam™ 是 Apache Software Foundation 或其关联公司在美国和/或其他国家/地区的商标。