Apache Beam: An advanced unified programming model
Implement batch and streaming data processing jobs that run on any execution engine.
Apache Beam:先进的统一程式设计模型,实现在任一执行引擎上执行批处理和流资料处理作业。

Apache Beam 是Google 开源的一个统一程式设计框架,它本身不是一个流式/批处理平台,而是提供了统一的程式设计模型,帮助使用者建立自己的资料处理流水线,实现可以执行在任意执行引擎之上批处理和流式处理任务。它包含:
一个可以涵盖批处理和流处理的统一程式设计模型;Beam SDK,支援 Java、 Python 和 GO;一系列Runner(可以理解为“界面卡”),让其程式设计模型执行在不同底层处理引擎(Google Cloud Dataflow,Spark,Flink等);
Apache Bean架构主要构成:
Beam SDKsBeam SDK定义了开发分散式资料处理任务业务逻辑的API界面,即提供一个统一的程式设计界面给到上层应用的开发者,开发者不需要了解底层的具体的大资料平台的开发界面是什么,直接通过Beam SDK的界面,就可以开发资料处理的加工流程,不管输入是用于批处理的有限资料集,还是流式的无限资料集。对于有限或无限的输入资料,Beam SDK都使用相同的类来表现,并且使用相同的转换操作进行处理。
Pipeline 是 Beam 的管道,所有的批处理或流处理都要通过这个管道把资料传输到后端的计算平台。这个管道现在是唯一的。资料来源可以切换多种,计算平台或处理平台也支援多种。需要注意的是,管道只有一条,它的作用是连线资料和 Runner 平台。
Beam Pipeline Runner(Beam管道执行器)Runner 是将使用者通过呼叫Beam SDK构成的program(pipeline)进行编译转换,当我们指定任意一个Runner时,program就会被转化为与该Runner相相容的可直接执行的程式,所以,在执行Beam程式时,需要指明底层的正确Runner型别。
使用者通过Beam Model构建一个数据处理管道(Pipeline),呼叫Beam SDK API 实现管道里的逻辑,也就是”程式设计实现”,然后Pipeline交给具体的Beam Runner编译,最后执行在分散式计算引擎上。执行引擎的选择权在于使用者。
目前 Flink、Spark、Apex 以及Google的 Cloud DataFlow 都有支援 Beam 的 Runner。
需要注意的是,虽然 Apache Beam 社群非常希望所有的 Beam 执行引擎都能够支援 Beam SDK 定义的功能全集,但是在实际实现中可能无法达到这一期望。例如,基于 MapReduce 的 Runner 显然很难实现和流处理相关的功能特性。就目前状态而言,对 Beam 模型支援最好的就是运行于Google云平台之上的 Cloud Dataflow,以及可以用于自建或部署在非Google云之上的 Apache Flink。当然,其它的 Runner 也正在迎头赶上,整个行业也在朝着支援 Beam 模型的方向发展。
Apache Beam 官网:
https://beam.apache.org/





























