Beam

Apache Beam的主要目标是统一批处理和流处理的编程范式,为无限,乱序,web-scale的数据集处理提供简单灵活,功能丰富以及表达能力十分强大的SDK。

Apache Beam项目重点在于数据处理的编程范式和接口定义,并不涉及具体执行引擎的实现,Apache Beam希望基于Beam开发的数据处理程序可以执行在任意的分布式计算引擎上。

Apache Beam基本架构

  1. 统一批处理和流处理的需求。
  2. 生成的分布式数据处理任务应该能够在各个分布式执行引擎上执行,用户可以自由切换分布式数据处理任务的执行引擎与执行环境。

Apache Beam主要由Beam SDKBeam Runner组成,Beam SDK定义了开发分布式数据处理任务业务逻辑的API接口,生成的的分布式数据处理任务Pipeline交给具体的Beam Runner执行引擎。

Beam Model

  1. 数据。分布式数据处理要处理的数据类型一般可以分为两类,有限的数据集和无限的数据流。
  2. 时间。Process Time是指数据进入分布式处理框架的时间,而Event-Time则是指数据产生的时间。
  3. 乱序。对于流处理框架处理的数据流来说,其数据的到达顺序可能并不严格按照Event-Time的时间顺序。对于基于Event Time定义的时间窗口来说,可能存在时间靠前的消息在时间靠后的消息后到达的情况。

Beam Model处理的目标数据是无限的时间乱序数据流,不考虑时间顺序或是有限的数据集可看做是无限乱序数据流的一个特例。

Beam Model从下面四个维度归纳了用户在进行数据处理的时候需要考虑的问题:

  1. What。如何对数据进行计算?
  2. Where。数据在什么范围中计算?
  3. When。何时将计算结果输出?
  4. How。迟到数据如何处理?

Beam SDK

Pipeline :

PCollection :

Transform :

Source and Sink :

A typical Beam driver program works as follows:

  1. Create a Pipeline object and set the pipeline execution options, including the Pipeline Runner.
  2. Create an initial PCollection for pipeline data, either using the Source API to read data from an external source, or using a Create transform to build a PCollection from in-memory data.
  3. Apply Transforms to each PCollection. Transforms can change, filter, group, analyze, or otherwise process the elements in a PCollection. A transform creates a new output PCollection without consuming the input collection. A typical pipeline applies subsequent transforms to the each new output PCollection in turn until processing is complete.
  4. Output the final, transformed PCollection(s), typically using the Sink API to write data to an external source.
  5. Run the pipeline using the designated Pipeline Runner.

Creating the Pipeline

Working with PCollections

Reference :

  1. Apache Beam: 下一代的大数据处理标准