Apache Beam 是一个开放源码的统一模型,用于定义批处理和流数据并行处理管道。Apache Beam 编程模型简化了大规模数据处理的机制,使用一个开源的 Beam sdk,你可以构建一个定义管道的程序,然后由 Beam 支持的分布式处理后端执行管道,这些后端包括 Apache Flink、 Apache Spark 和 Google Cloud Dataflow。
Apache Beam 模型可提供有用的抽象,这些抽象使你无需去操心分布式处理的低层细节,例如协调各个工作器、分片数据集和其他此类任务,Dataflow 可全面管理这些低层细节,使你以专注于对数据处理作业进行逻辑组合,而不是对并行处理进行物理编排。你可以专注于你需要作业执行的任务,而不是执行作业的方式。
Beam 对于令人尴尬的并行数据处理任务特别有用,在这些任务中,问题可以被分解成许多较小的数据束,这些数据束可以独立地并行处理。你还可以使用 Beam 进行提取、转换和加载(ETL)任务和纯数据集成。这些任务对于在不同的存储介质和数据源之间移动数据、将数据转换为更理想的格式或将数据加载到新系统都很有用。
管道封装了涉及读取输入数据、转换数据和写入输出数据的整个一系列计算。输入源和输出接收器可以是相同的,也可以是不同类型的,这允许您将数据从一种格式转换为另一种格式。Apache Beam程序首先构造一个Pipeline对象,然后使用该对象作为创建管道数据集的基础。每个管道代表一个单独的、可重复的作业。
PCollection表示一个潜在的分布式、多元素数据集,它充当管道的数据。Apache Beam转换使用PCollection对象作为管道中每个步骤的输入和输出。PCollection可以保存固定大小的数据集,也可以保存来自不断更新的数据源的无界数据集。
转换表示转换数据的处理操作。转换接受一个或多个PCollections作为输入,执行您对该集合中的每个元素指定的操作,并生成一个或多个PCollections作为输出。转换可以执行几乎任何类型的处理操作,包括对数据执行数学计算、将数据从一种格式转换为另一种格式、将数据分组、读取和写入数据、过滤数据以只输出所需的元素,或将数据元素组合成单个值。
ParDo是Apache Beam sdk中的核心并行处理操作,它对输入PCollection的每个元素调用用户指定的函数。ParDo将零个或多个输出元素收集到一个输出PCollection中。ParDo可以独立地(可能是并行地)转换流程元素。
Apache Beam I/O连接器允许您将数据读取到管道中,并将输出数据从管道中写入。一个I/O连接器由一个源和一个接收器组成。所有Apache Beam源和接收都是转换,它们让您的管道处理来自几种不同数据存储格式的数据。您还可以编写自定义I/O连接器。
聚合是从多个输入元素计算某个值的过程。Apache Beam中用于聚合的主要计算模式是用一个公共键和窗口对所有元素进行分组。然后,它使用结合和交换运算组合每一组元素。
Apache Beam中的一些操作允许执行用户定义的代码,作为配置转换的一种方式。对于ParDo,用户定义的代码指定了应用于每个元素的操作,对于Combine,它指定了应该如何组合值。管道可能包含用不同于运行程序语言的语言编写的udf。管道还可能包含用多种语言编写的udf。
Runners是接受管道并执行它的软件。大多数Runners都是大规模并行大数据处理系统的翻译或适配器。其他运行器用于本地测试和调试。
数据事件发生的时间,由数据元素本身上的时间戳确定。这与在管道中的任何阶段处理实际数据元素的时间形成对比。
窗口可以根据单个元素的时间戳将集合划分为有限集合的窗口,从而对无界集合进行分组操作。窗口函数告诉运行程序如何将元素分配给初始窗口,以及如何合并分组元素的窗口。Apache Beam允许您定义不同种类的窗口或使用预定义的窗口函数。
Apache Beam跟踪一个水印,这是系统的概念,即某个窗口中的所有数据何时能够到达管道。Apache Beam跟踪水印是因为数据不能保证按时间顺序或可预测的间隔到达管道中。此外,也不能保证数据事件将以与生成数据事件相同的顺序出现在管道中。
触发器决定数据到达时何时发出聚合结果。对于有界数据,结果是在处理完所有输入之后发出的。对于无界数据,当水印通过窗口的末端时将发出结果,这表明系统认为该窗口的所有输入数据都已被处理。Apache Beam提供了几个预定义的触发器,并允许您组合它们。
1.创建一个Pipeline对象并设置管道执行选项,包括Pipeline Runner。
2.为管道数据创建一个初始的PCollection,可以使用IOs从外部存储系统读取数据,也可以使用Create转换从内存中的数据构建PCollection。
3.对每个PCollection应用PTransforms。转换可以更改、筛选、分组、分析或以其他方式处理PCollection中的元素。转换创建一个新的输出PCollection而不修改输入集合。典型的管道依次对每个新的输出PCollection应用后续转换,直到处理完成。但是,请注意,管道并不一定是一个接一个应用的转换的直线:将PCollections看作变量,而将PTransforms看作应用于这些变量的函数:管道的形状可以是任意复杂的处理图。
4.使用IOs编写最终的,转换的PCollection(s)到外部源。
5.使用指定的管道运行器运行管道。
当你运行你的Beam驱动程序时,你指定的Pipeline Runner会基于你创建的PCollection对象和你应用的转换构造你的管道的工作流图。然后使用适当的分布式处理后端执行该图,成为该后端上的异步“作业”(或等效)。