|
在大数据处理领域,开发者经常要用到很多不同的技术、框架、API、开发语言和SDK。根据不同的企业业务系统开发需求,开发者很可能会用MapReduce进行批处理,用Spark SQL进行交互式查询,用Flink实现实时流处理,还有可能用到基于云端的机器学习框架。大量的开源大数据产品(比如MapReduce、Spark、Flink、Storm、Apex等),为大数据开发者提供了丰富的工具的同时,也增加了开发者选择合适工具的难度,尤其对于新入行的开发者来说更是如此。新的分布式处理框架可能带来更高的性能、更强大的功能和更低的延迟,但是,用户切换到新的分布式处理框架的代价也非常大——需要学习一个新的大数据处理框架,并重写所有的业务逻辑。解决这个问题的思路包括两个部分:首先,需要一个编程范式,能够统一、规范分布式数据处理的需求,例如,统一批处理和流处理的需求;其次,生成的分布式数据处理任务,应该能够在各个分布式执行引擎(如Spark、Flink等)上执行,用户可以自由切换分布式数据处理任务的执行引擎与执行环境。Apache Beam的出现,就是为了解决这个问题。 Beam是由谷歌贡献的Apache顶级项目,它的目标是为开发者提供一个易于使用、却又很强大的数据并行处理模型,能够支持流处理和批处理,并兼容多个运行平台。Beam是一个开源的统一的编程模型,开发者可以使用Beam SDK来创建数据处理管道,然后,这些程序可以在任何支持的执行引擎上运行,比如运行在Apex、Spark、Flink、Cloud Dataflow上。Beam SDK定义了开发分布式数据处理任务业务逻辑的API接口,即提供一个统一的编程接口给到上层应用的开发者,开发者不需要了解底层的具体的大数据平台的开发接口是什么,直接通过Beam SDK的接口,就可以开发数据处理的加工流程,不管输入是用于批处理的有限数据集,还是用于流处理的无限数据集。对于有限或无限的输入数据,Beam SDK都使用相同的类来表现,并且使用相同的转换操作进行处理。 终端用户用Beam来实现自己所需的流计算功能,使用的终端语言可能是Python、Java等,Beam为每种语言提供了一个对应的SDK,用户可以使用相应的SDK创建数据处理管道,用户写出的程序可以被运行在各个Runner上,每个Runner都实现了从Beam管道到平台功能的映射。目前主流的大数据处理框架Flink、Spark、Apex以及谷歌的Cloud DataFlow等,都有了支持Beam的Runner。通过这种方式,Beam使用一套高层抽象的API屏蔽了多种计算引擎的区别,开发者只需要编写一套代码就可以运行在不同的计算引擎之上(比如Apex、Spark、Flink、Cloud Dataflow等)。 【出处】林子雨.大数据技术原理与应用(第3版).人民邮电出版社,2021年1月.
|