Apache Beam 词汇表
聚合
一种用于从多个输入元素计算值的转换模式。聚合类似于 MapReduce 模型中的 reduce 操作。聚合转换包括 Combine(将用户定义函数应用于聚合中的所有元素)、Count(计算聚合中所有元素的计数)、Max(计算聚合中的最大元素)和 Sum(计算聚合中所有元素的总和)。
有关内置聚合转换的列表,请参见
要了解更多信息,请参见
应用
一种在输入 PCollection(或一组 PCollections)上调用转换以生成一个或多个输出 PCollections 的方法。apply
方法附加到 PCollection(或值)。调用多个 Beam 转换类似于方法链接,但存在一个区别:您将转换应用于输入 PCollection,并将转换本身作为参数传递,操作返回输出 PCollection。由于 Beam 的延迟执行模型,应用转换不会立即执行该转换。
要了解更多信息,请参见
批处理
一种用于处理有限或有界数据集的数据处理范式。有界 PCollection 表示一个已知固定大小的数据集。从批处理数据源(如文件或数据库)读取会创建有界 PCollection。批处理作业最终会结束,这与流式作业不同,流式作业会一直运行,直到被取消。
要了解更多信息,请参见
有界数据
一个已知固定大小的数据集(或者,一个随着时间推移不会增长的数据集)。PCollection 可以是有界或无界,具体取决于它表示的数据源。从批处理数据源(如文件或数据库)读取会创建有界 PCollection。Beam 还支持从无界源读取有界数量的数据。
要了解更多信息,请参见
捆绑
PCollection 中元素的处理和提交/重试单元。Beam 不会同时处理 PCollection 中的所有元素,而是将元素打包处理。运行器负责将集合划分为捆绑,并且在这样做时,它可能会针对用例优化捆绑大小。例如,流式运行器可能比批处理运行器处理更小的捆绑。
要了解更多信息,请参见
编码器
描述如何对 PCollection 的元素进行编码和解码的组件。为了支持分布式处理和跨语言可移植性,Beam 需要能够将 PCollection 的每个元素编码为字节。Beam SDK 提供了针对常见类型的内置编码器,以及针对指定 PCollection 编码的特定于语言的机制。
要了解更多信息,请参见
CoGroupByKey
一个 PTransform,它接受两个或多个 PCollections,并按键聚合元素。实际上,CoGroupByKey 对两个或多个具有相同键类型的键/值 PCollections 执行关系连接。虽然 GroupByKey 在单个输入集合上执行此操作,但 CoGroupByKey 在多个输入集合上执行此操作。
要了解更多信息,请参见
集合
见 PCollection.
Combine
一种 PTransform,用于组合 PCollection 中的所有元素或与键关联的所有值。当您应用 Combine 转换时,您必须提供一个包含组合元素或值的逻辑的用户定义函数 (UDF)。组合函数应该是 交换性的 并且 结合性的,因为该函数不一定会对具有给定键的所有值准确调用一次。
要了解更多信息,请参见
复合转换
一个 PTransform,它扩展为多个 PTransforms。复合转换具有嵌套结构,其中复杂转换应用一个或多个更简单的转换。这些更简单的转换可以是现有的 Beam 操作,如 ParDo、Combine 或 GroupByKey,也可以是其他复合转换。将多个转换嵌套在一个复合转换中可以使您的管道更加模块化,更容易理解。许多内置转换都是复合转换。
要了解更多信息,请参见
计数器(指标)
一种报告单个长值并且可以递增的指标。在 Beam 模型中,指标提供了对管道状态的洞察力,这可能是在管道运行时进行的。
要了解更多信息,请参见
跨语言转换
可以在多个 Beam SDK 中共享的转换。借助跨语言转换,您可以在用不同 SDK 语言编写的管道中使用用任何支持的 SDK 语言(目前为 Java 和 Python)编写的转换。例如,您可以在 Python 流式管道中使用 Java SDK 的 Apache Kafka 连接器。跨语言转换使您能够在不同的 SDK 中同时提供新功能。
要了解更多信息,请参见
延迟执行
Beam 执行模型的一项功能。Beam 操作是延迟的,这意味着给定操作的结果可能无法用于控制流。延迟执行允许 Beam API 支持数据的并行处理并执行管道级优化。
分布(指标)
一个度量指标,用于报告有关已报告值的分布的信息。在 Beam 模型中,度量指标提供了对管道状态的洞察,可能在管道运行时提供洞察。
要了解更多信息,请参见
DoFn
一个函数对象,由 ParDo(或其他一些转换)用来处理 PCollection 的元素,通常为输出 PCollection 生成元素。DoFn 是一个用户定义的函数,这意味着它包含自定义代码,用于定义管道中的数据处理任务。Beam 系统会调用 DoFn 一次或多次来处理一些任意元素捆绑,但 Beam 不保证确切的调用次数。
要了解更多信息,请参见
驱动程序
一个定义了你的管道的程序,包括所有输入、转换和输出。要使用 Beam,你需要使用来自某个 Beam SDK 的类创建一个驱动程序。驱动程序创建一个管道并指定执行选项,这些选项告诉管道在哪里以及如何运行。这些选项包括运行器,它决定你的管道将在哪个后端运行。
要了解更多信息,请参见
元素
PCollection 中的数据单元。PCollection 中的元素可以是任何类型,但它们必须具有相同的类型。这允许并行计算在整个集合中统一操作。一些元素类型具有可以被内省的结构(例如,JSON、协议缓冲区、Avro 和数据库记录)。
要了解更多信息,请参见
逐元素
一种类型的转换,它独立地处理输入 PCollection 中的每个元素。逐元素类似于 MapReduce 模型中的 map 操作。逐元素转换可能为每个输入元素输出 0、1 或多个值。这与聚合转换形成对比,聚合转换从多个输入元素计算一个单一值。逐元素操作包括 Filter、FlatMap 和 ParDo。
有关逐元素转换的完整列表,请参见
引擎
一个数据处理系统,例如 Dataflow、Spark 或 Flink。一个引擎的 Beam 运行器将在该引擎上执行 Beam 管道。
事件时间
数据事件发生的时刻,由元素上的时间戳决定。这与处理时间形成对比,处理时间是指元素在管道中被处理的时刻。事件可以是,例如,用户交互或写入错误日志。无法保证事件将按事件时间顺序出现在管道中,但窗口和计时器可以让你正确地推断事件时间。
要了解更多信息,请参见
扩展服务
一项服务,它使管道能够应用(扩展)在其他 SDK 中定义的跨语言转换。例如,通过连接到 Java 扩展服务,Python SDK 可以应用在 Java 中实现的转换。目前,SDK 通常将扩展服务作为本地进程启动,但将来 Beam 可能会支持长期运行的扩展服务。扩展服务的发展是支持多语言管道持续努力的一部分。
Flatten
核心 PTransforms 之一。Flatten 将多个 PCollection 合并为一个单一的逻辑 PCollection。
要了解更多信息,请参见
Fn API
一个接口,允许运行器调用 SDK 特定的用户定义函数。Fn API 与 Runner API 一起,支持混合和匹配 SDK 和运行器。Fn 和 Runner API 共同使用,使新的 SDK 能够在每个运行器上运行,并使新的运行器能够运行来自每个 SDK 的管道。
融合
Beam 运行器可以在运行管道之前应用的一种优化。当一个转换输出一个由另一个转换消耗的 PCollection 时,或者当两个或多个转换将同一个 PCollection 作为输入时,运行器可能能够将这些转换融合到一个单一的处理单元(Dataflow 中的阶段)中。消费 DoFn 在生成 DoFn 发出元素时处理元素,而不是等待整个中间 PCollection 被计算出来。融合可以通过防止 I/O 操作使管道执行更有效率。
仪表(指标)
一个度量指标,报告已报告值中的最新值。在 Beam 模型中,度量指标提供了对管道状态的洞察,可能在管道运行时提供洞察。由于度量指标是从多个工作器收集的,因此仪表值可能不是绝对的最后一个值,但它将是其中一个工作器产生的最新值之一。
要了解更多信息,请参见
GroupByKey
一个用于处理键值对集合的 PTransform。GroupByKey 是一个并行归约操作,类似于 map/shuffle/reduce 算法的 shuffle。GroupByKey 的输入是一个键值对集合,其中多个对具有相同的键但不同的值(即多重映射)。你可以使用 GroupByKey 来收集与每个唯一键相关联的所有值。
要了解更多信息,请参见
I/O 连接器
一组用于处理外部数据存储系统的 PTransforms。当你创建管道时,你通常需要从外部数据系统(例如文件或数据库)读写数据。Beam 为许多常见数据存储类型提供了读写转换。
要了解更多信息,请参见
映射
一个逐元素 PTransform,它将用户定义的函数 (UDF) 应用于 PCollection 中的每个元素。使用 Map,你可以将每个单独的元素转换为一个新的元素,但你不能改变元素的数量。
要了解更多信息,请参见
指标
有关管道状态的数据,可能在管道运行时提供。你可以使用内置的 Beam 度量指标来深入了解你的管道功能。例如,你可以使用 Beam 度量指标来跟踪错误、对后端服务的调用或处理的元素数量。Beam 目前支持三种类型的度量指标:计数器、分布和仪表。
要了解更多信息,请参见
多语言管道
一个使用跨语言转换的管道。你可以组合用任何支持的 SDK 语言(目前是 Java 和 Python)编写的转换,并将它们用于一个多语言管道中。
要了解更多信息,请参见
ParDo
最低级别的逐元素 PTransform。对于输入 PCollection 中的每个元素,ParDo 应用一个函数并向输出 PCollection 发射零个、一个或多个元素。“ParDo” 是“Parallel Do” 的缩写。它类似于 MapReduce 算法中的 map 操作,以及在遵循 GroupByKey 时的 reduce 操作。ParDo 也类似于 DataFrame 的 apply
方法,或 SQL 的 UPDATE
关键字。
要了解更多信息,请参见
Partition
一个逐元素 PTransform,它将一个单一的 PCollection 拆分为固定数量的较小的、不相交的 PCollection。Partition 需要一个用户定义的函数 (UDF) 来确定如何将输入集合的元素拆分为结果输出集合。分区数量必须在图形构建时确定,这意味着你不能使用运行管道计算的数据来确定分区数量。
要了解更多信息,请参见
PCollection
一个可能是分布式的、同质的、数据集或数据流。PCollections 代表 Beam 管道中的数据,Beam 转换 (PTransforms) 使用 PCollection 对象作为输入和输出。PCollections 旨在是不可变的,这意味着一旦 PCollection 被创建,你就不能添加、删除或更改单个元素。“P” 代表“parallel”。
要了解更多信息,请参见
管道运算符(|
)
在 Python 管道中划分一个步骤。例如:[Final Output PCollection] = ([Initial Input PCollection] | [First Transform] | [Second Transform] | [Third Transform])
。每个转换的输出从左到右传递到下一个转换作为输入。Python 中的管道运算符等同于 Java 中的 apply
方法(换句话说,管道将转换应用于 PCollection),其用法类似于 shell 脚本中的管道运算符,它允许你将一个程序的输出传递到另一个程序的输入。
要了解更多信息,请参见
管道
整个数据处理任务的封装,包括从源读取输入数据、转换该数据以及将输出数据写入接收器。你可以将管道视为使用 PTransforms 处理 PCollections 的 Beam 程序。(或者,你可以将其视为一个单独的可执行复合 PTransform,它没有输入或输出。)管道中的转换可以表示为一个有向无环图 (DAG)。所有 Beam 驱动程序都必须创建一个管道。
要了解更多信息,请参见
处理时间
元素在管道中某个阶段被处理的实际时间。处理时间与事件时间不同,事件时间是指数据事件发生的时刻。处理时间由处理元素的系统上的时钟决定。无法保证元素将按事件时间顺序被处理。
要了解更多信息,请参见
PTransform
管道中的数据处理操作或步骤。PTransform 将零个或多个 PCollection 作为输入,将处理函数应用于该 PCollection 的元素,并生成零个或多个输出 PCollection。一些 PTransforms 接受用户定义的函数,这些函数应用自定义逻辑。“P” 代表“parallel”。
要了解更多信息,请参见
资源提示
一项 Beam 功能,允许你向运行器提供有关管道计算资源要求的信息。你可以使用资源提示来定义对特定转换或整个管道的要求。例如,你可以使用资源提示来指定分配给工作器的最小内存量。运行器负责解释资源提示,运行器可以忽略不支持的提示。
要了解更多信息,请参见
运行器
运行器在特定平台上运行管道。大多数运行器是到大规模并行大数据处理系统的翻译器或适配器。还存在用于本地测试和调试的其他运行器。支持的运行器包括 Google Cloud Dataflow、Apache Spark、Apache Samza、Apache Flink、交互式运行器和直接运行器。
要了解更多信息,请参见
模式
PCollection 元素的语言无关类型定义。PCollection 的模式将该 PCollection 的元素定义为一个有序的命名字段列表。每个字段都有一个名称、一个类型,可能还有一组用户选项。模式提供了一种跨不同编程语言 API 推断类型的方法。它们还使你能够更简洁地描述数据转换,并在更高层面上描述数据转换。
要了解更多信息,请参见
会话
用于对数据事件进行分组的时间间隔。会话由事件之间的最小间隔持续时间定义。例如,表示用户鼠标活动的数据流可能具有事件密集的点击期,然后是活动不活跃期。会话可以表示由不活跃期分隔的这种活动模式。
要了解更多信息,请参见
侧输入
PTransform 的附加输入,该输入完整提供,而不是逐元素提供。侧输入是除了主输入 PCollection 之外提供的输入。DoFn 可以在每次处理 PCollection 中的元素时访问侧输入。
要了解更多信息,请参见
接收器
写入外部数据存储系统(如文件或数据库)的转换。
要了解更多信息,请参见
源
从外部存储系统读取的转换。管道通常从源读取输入数据。源具有一个类型,该类型可能与接收器类型不同,因此你可以更改数据在管道中移动时的格式。
要了解更多信息,请参见
可拆分 DoFn
DoFn 的一种泛化形式,使创建复杂的、模块化的 I/O 连接器变得更容易。可拆分的 DoFn (SDF) 可以以非整体的方式处理元素,这意味着处理可以分解成更小的任务。使用 SDF,您可以检查元素的处理情况,还可以拆分剩余的工作以提高并行性。建议使用 SDF 来构建新的 I/O 连接器。
要了解更多信息,请参见
阶段
管道中融合转换的单元。运行程序可以执行融合优化以提高管道执行效率。在 Dataflow 中,管道被概念化为融合阶段的图形。
状态
PTransform 可以访问的持久值。状态 API 允许您使用可变状态来增强逐元素操作(例如,ParDo 或 Map)。使用状态 API,您可以在处理 PCollection 的每个元素时读取和写入状态。您可以将状态 API 与计时器 API 一起使用以创建处理任务,这些任务可以为您提供对工作流的细粒度控制。状态始终是键和窗口的本地状态。
要了解更多信息,请参见
流式处理
用于处理无限或无界数据集的数据处理范例。从流式数据源(如 Pub/Sub 或 Kafka)读取会创建一个无界 PCollection。无界 PCollection 必须使用持续运行的作业进行处理,因为整个集合永远不可能在任何时间点都可供处理。
要了解更多信息,请参见
计时器
Beam 的一项功能,它允许延迟处理使用状态 API 存储的数据。计时器 API 允许您设置计时器,以便在事件时间或处理时间时间戳处回调。您可以将计时器 API 与状态 API 一起使用以创建处理任务,这些任务可以为您提供对工作流的细粒度控制。
要了解更多信息,请参见
时间戳
与 PCollection 中的元素相关联的事件时间点,用于将窗口分配给元素。创建 PCollection 的源会为每个元素分配初始时间戳,通常对应于读取或添加元素的时间。但是,您也可以手动分配时间戳。如果元素具有固有的时间戳,但时间戳位于元素本身的结构中的某个位置(例如,服务器日志条目中的时间字段),这将非常有用。
要了解更多信息,请参见
转换
请参阅 PTransform。
触发器
确定何时从窗口中发出聚合结果数据。您可以使用触发器来完善管道的窗口策略。如果您使用默认的窗口配置和默认触发器,Beam 会在估计窗口的所有数据都已到达时输出聚合结果,并且会丢弃该窗口的所有后续数据。但是,您也可以使用触发器在所有给定窗口中的数据都到达之前发出早期结果,或者通过在事件时间水印超过窗口结束时间后触发来处理延迟数据。
要了解更多信息,请参见
无界数据
随着时间的推移而增长的数据集,元素在到达时进行处理。PCollection 可以是有界的或无界的,具体取决于它所代表的数据的来源。从流式或持续更新的数据源(如 Pub/Sub 或 Kafka)读取通常会创建一个无界 PCollection。
要了解更多信息,请参见
用户定义函数
PTransform 对数据应用的自定义逻辑。某些 PTransform 接受用户定义函数 (UDF) 作为配置转换的方式。例如,ParDo 期望以 DoFn 对象的形式提供用户代码。每个语言 SDK 都有自己的表达用户定义函数的惯用方式,但有一些共同的要求,例如可序列化性和线程兼容性。
要了解更多信息,请参见
水印
对管道此时(将来)将看到的时间戳的下限的估计。水印提供了一种估计输入数据完整性的方法。每个 PCollection 都有一个关联的水印。一旦水印超过窗口结束时间,任何以该窗口中的时间戳到达的元素都将被视为延迟数据。
要了解更多信息,请参见
窗口化
将 PCollection 分区成有界子集,这些子集根据各个元素的时间戳进行分组。在 Beam 模型中,任何 PCollection(包括无界 PCollection)都可以细分为逻辑窗口。PCollection 中的每个元素根据 PCollection 的窗口函数分配到一个或多个窗口,并且每个单独的窗口都包含有限数量的元素。聚合多个元素的转换(例如 GroupByKey 和 Combine)在每个窗口的基础上隐式地工作。
要了解更多信息,请参见
工作器
处理管道并行处理的某一部分的容器、进程或虚拟机 (VM)。每个工作节点都有自己的独立状态副本。出于通信目的以及持久化等其他原因,Beam 运行程序可能会在机器之间序列化元素。
要了解更多信息,请参见
最后更新于 2024/10/31
您找到您要找的所有内容了吗?
所有内容都有用且清晰吗?您想更改任何内容吗?请告诉我们!