Apache Beam:开源的统一编程模型,实现批、流数据处理作业

Apache Beam: An advanced unified programming model

Implement batch and streaming data processing jobs that run on any execution engine.

Apache Beam:先进的统一编程模型,实现在任一执行引擎上运行批处理和流数据处理作业。

Apache Beam:开源的统一编程模型,实现批、流数据处理作业

Apache Beam 是Google 开源的一个统一编程框架,它本身不是一个流式/批处理平台,而是提供了统一的编程模型,帮助用户创建自己的数据处理流水线,实现可以运行在任意执行引擎之上批处理和流式处理任务。它包含:

  • 一个可以涵盖批处理和流处理的统一编程模型;
  • Beam SDK,支持 Java、 Python 和 GO;
  • 一系列Runner(可以理解为“适配器”),让其编程模型运行在不同底层处理引擎(Google Cloud Dataflow,Spark,Flink等);

Apache Beam:开源的统一编程模型,实现批、流数据处理作业

Apache Bean架构主要构成:

  • Beam SDKs

Beam 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 以及谷歌的 Cloud DataFlow 都有支持 Beam 的 Runner。

需要注意的是,虽然 Apache Beam 社区非常希望所有的 Beam 执行引擎都能够支持 Beam SDK 定义的功能全集,但是在实际实现中可能无法达到这一期望。例如,基于 MapReduce 的 Runner 显然很难实现和流处理相关的功能特性。就目前状态而言,对 Beam 模型支持最好的就是运行于谷歌云平台之上的 Cloud Dataflow,以及可以用于自建或部署在非谷歌云之上的 Apache Flink。当然,其它的 Runner 也正在迎头赶上,整个行业也在朝着支持 Beam 模型的方向发展。

Apache Beam 官网:

https://beam.apache.org/

相关推荐