专栏名称: InfoQ
有内容的技术社区媒体。
目录
相关文章推荐
艾瑞咨询  ·  超高清音视频接口技术洞察白皮书 ·  2 天前  
极客公园  ·  追觅,杀入大家电赛道 ·  3 天前  
新浪科技  ·  【#百度文心大模型4.5发布##百度文心大模 ... ·  3 天前  
51好读  ›  专栏  ›  InfoQ

Apache Beam的前世今生:谷歌已经不再使用MapReduce了

InfoQ  · 公众号  · 科技媒体  · 2017-02-02 09:02

正文

作者|足下编译
编辑|Tina
1月10日,Apache软件基金会宣布,Apache Beam成功孵化,成为该基金会的一个新的顶级项目。Google开源的Beam恰逢其时,在各种大数据处理引擎百花齐放时推出一个统一编程框架,统一批处理和流处理,适配各种处理引擎,将它们推入后台,霸占入口。Apache Beam项目中的所有参与方都会受益,可以专注于技术创新,提供更高的性能、更好的可靠性、更方便的运维管理等。
写在前面

“神说,要有光,就有了光”。——《圣经》

1月10日,Apache软件基金会宣布,Apache Beam成功孵化,成为该基金会的一个新的顶级项目,基于Apache V2许可证开源。

2003年,谷歌发布了著名的大数据三篇论文,史称三驾马车:Google FS、MapReduce、BigTable。虽然谷歌没有公布这三个产品的源码,但是她这三个产品的详细设计论文开启了全球的大数据时代!从Doug Cutting大神根据谷歌的论文实现出Hadoop+MapReduce的雏形,到Hadoop生态圈各种衍生产品的蓬勃发展,再到后来的Spark、流式计算等等,所有的一切都要归功于、源自这三篇论文。

可惜谷歌虽然开启了这个伟大的时代,却始终仅仅满足于偶尔发表一两篇论文以强调自己在理论和工程上的领导地位,从来没有亲身参与进来,尤其是没有为开源生态做出什么贡献,因而一直没有从大数据市场获得什么实在的好处。

痛定思痛,谷歌开始走开源之路,将自己的标准推广给社区。从众所周知的Kubernetes,到2016年2月谷歌高调宣布将Apache Beam(原名Google DataFlow)贡献给Apache基金会孵化,再到最近大热的Tensorflow等等,动作不断。Apache Beam被认为是继MapReduce,GFS和BigQuery等之后,谷歌在大数据处理领域对开源社区的又一个非常大的贡献。

也就是说,在大数据处理的世界里,谷歌一直在内部闭源,开发并使用着BigTable、Spanner、Millwheel等让大家久闻大名而又无缘一见的产品,开源世界演进出了Hadoop、Spark、Apache Flink等产品,现在他们终于殊途同归,走到一起来了。

为什么要推出开源的Apache Beam?

Apache Beam的主要负责人Tyler Akidau在他的博客中提到他们做这件事的理念是:

要为这个世界贡献一个容易使用而又强大的模型,用于大数据的并行处理,同时适用于流式处理和批量处理,而且在各种不同平台上还可以移植。

那这一次为什么不是又酷酷的发表一篇论文,然后退居一旁静静的观察呢?为什么要联合一众伙伴为大家直接提供可以运行的代码了呢?原因主要有两点:

  • 尽管在过去谷歌一直是闭源的,但在为云客户服务的过程中,谷歌已经认识到了开源软件的的巨大价值,比如基于谷歌三篇论文产生的Hadoop社区就是一个非常好的例子。思想上的转变使Apache Beam的诞生成为可能;

  • 就Beam这个项目而言,要成功的必要条件之一是,必须有已经开源的Runner为Beam模型提供充分的支持,这样它才会在自建云和非谷歌云的场景下成为一个非常有竞争力的备选方案。去年Apache Flink在他们的系统内采用了Beam模型,这一条件也得到了满足;

无利不起早,谷歌这样做也是有着直接商业动机的,就是希望能有尽可能多的Apache Beam数据处理流水线可以运行在谷歌的Cloud Dataflow上,别忘了这是Apache Beam的原型。进一步说,采用开源的方式来引导这件事,也是有许多直接好处的:

  • 支持Apache Beam的Runner越多,它作为一个平台的吸引力就越大;

  • 使用Apache Beam的用户越多,想在谷歌云平台上运行Apache Beam的用户也就越多;

  • 开发Apache Beam过程中吸引到的伙伴越多,那对这样的数据处理模型的推广就越有利;

而且,好处也不会全都归于谷歌,Apache Beam项目中的所有参与方都会受益。如果在构建数据处理流水线时存在着这样一个可移植的抽象层,那就会更容易出现新的Runner,它们可以专注于技术创新,提供更高的性能、更好的可靠性、更方便的运维管理等。换句话说,消除了对API的锁定,就解放了处理引擎,会导致更多产品之间的竞争,从而最终对整个行业起到良性的促进作用。

谷歌坚信Apache Beam就是数据批量处理和流式处理的未来。这么做会为各种不同的Runner营造一个健康的生态系统,让它们之间相互竞争,而最后可以让用户得到实在的好处。

Apache Beam是什么?

要说Apache Beam,先要说说谷歌Cloud Dataflow。Dataflow是一种原生的谷歌云数据处理服务,是一种构建、管理和优化复杂数据流水线的方法,用于构建移动应用、调试、追踪和监控产品级云应用。它采用了谷歌内部的技术Flume和MillWhell,其中Flume用于数据的高效并行化处理,而MillWhell则用于互联网级别的带有很好容错机制的流处理。该技术提供了简单的编程模型,可用于批处理和流式数据的处理任务。她提供的数据流管理服务可控制数据处理作业的执行,数据处理作业可使用DataFlow SDK创建。

Apache Beam本身不是一个流式处理平台,而是一个统一的编程框架,它提供了开源的、统一的编程模型,帮助你创建自己的数据处理流水线,实现可以运行在任意执行引擎之上批处理和流式处理任务。Beam对流式计算场景中的所有问题重新做了一次归纳,然后针对这些问题提出了几种不同的解决模型,然后再把这些模型通过一种统一的语言给实现出来,最终这些Beam程序可以运行在任何一个计算平台上(只要相应平台——即Runner实现了对Beam的支持)。它的特点有:

  • 统一的:对于批处理和流式处理,使用单一的编程模型;

  • 可移植的:可以支持多种执行环境,包括Apache Apex、Apache Flink、Apache Spark和谷歌Cloud Dataflow等;

  • 可扩展的:可以实现和分享更多的新SDK、IO连接器、转换操作库等;

Beam特别适合应用于并行数据处理任务,只要可以将要处理的数据集分解成许多相互独立而又可以并行处理的小集合就可以了。Beam也可以用于ETL任务,或者单纯的数据整合。这些任务主要就是把数据在不同的存储介质或者数据仓库之间移动,将数据转换成希望的格式,或者将数据导入一个新系统。

Beam主要包含两个关键的部分:

Beam SDK

Beam SDK提供一个统一的编程接口给到上层应用的开发者,开发者不需要了解底层的具体的大数据平台的开发接口是什么,直接通过Beam SDK的接口,就可以开发数据处理的加工流程,不管输入是用于批处理的有限数据集,还是流式的无限数据集。对于有限或无限的输入数据,Beam SDK都使用相同的类来表现,并且使用相同的转换操作进行处理。Beam SDK可以有不同编程语言的实现,目前已经完整地提供了Java,python的SDK还在开发过程中,相信未来会有更多不同的语言的SDK会发布出来。

Beam Pipeline Runner

Beam Pipeline Runner将用户用Beam模型定义开发的处理流程翻译成底层的分布式数据处理平台支持的运行时环境。在运行Beam程序时,需要指明底层的正确Runner类型。针对不同的大数据平台,会有不同的Runner。目前Flink、Spark、Apex以及谷歌的Cloud DataFlow都有支持Beam的Runner。

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

那大家可以怎样与Beam做亲密接触呢?

如上图所示,主要有三个方面:

  • 数据处理:直接使用已有的自己熟悉语言的SDK,根据Beam模型去定义并实现自己的数据处理流程;

  • SDK实现:用新的编程语言去根据Beam概念实现SDK,这样大家以后在编程语言方面就可以有更多选择了;

  • Runner实现:将已有的分布式数据处理平台作为一种新的Runner,接入Beam模型。

Beam是怎么做的?

在任何一个设计开始之前,都先要确定问题,Beam也不例外。

1.数据







请到「今天看啥」查看全文