想运用好 Spark,这些底层逻辑先要搞懂!

sw

你好,我是范东来,今天我们来聊聊一个比较基础也比较重要的内容MapReduce,说它基础,是因为它诞生的时间实在是太久远了,并不是什么新东西,说它重要则是因为基于它的提出衍生出很多重要的技术,比如我们关心的Spark。

01Google的三驾马车

USNew把计算机科学分为4个领域:人工智能、编程语言、系统以及理论。其中的系统领域有两大顶级会议,一个是ODSI(USENIXconferenceonOperatingSystemsDesignandImplementation),另一个是SOSP(ACMSymposiumonOperatingSystemsPrinciples),这两个会议在业界的分量非常重,如果把近几十年关于这两个会议的重要论文收录到一本书,就可以看作是操作系统和分布式系统的一本教科书。

从2003年到2006年,Google分别在ODSI与SOSP发表了3篇论文,引起了业界对于分布式系统的广泛讨论,这三篇论文分别是:

SOSP2003:TheGoogleFileSystem;

ODSI2004:MapReduce:SimplifedDataProcessingonLargeClusters;

ODSI2006:Bigtable:ADistributedStorageSystemforStructuredData。

在2006年,Google首席执行官施密特提出了云计算这个词语,Google的这3篇论文也被称为Google的三驾马车,代表Google大数据处理的基石、云计算的基础。不过值得注意的是,虽然Google作为业界领军者经常会将自己的技术开源出来,但是客观地讲,Google开源出来的技术并不是内部使用的最新技术,中间甚至会有代差,这也侧面反映出Google的技术实力。

第1篇论文主要讨论分布式文件系统,第2篇论文主要讨论的分布式计算框架,第3篇论文则主要讨论分布式数据存储。这3篇论文揭开了分布式系统神秘的面纱,为大数据处理技术做出了重要的贡献。有了这3篇论文的理论基础与后续的一系列文章,再加上开源社区强大的实践能力,Hadoop、HBase、Spark等很快走上了台前,大数据技术开始呈现出一个百花齐放的状态。

02MapReduce编程模型与MapReduce计算框架

在第2篇文章中,Google明确表示MapReduce是其实现的一个分布式计算框架,其编程模型名为MapReduce。开源社区基于这篇论文的内容,照猫画虎地实现了一个分布式计算框架,也叫作MapReduce。但一些书籍和网上的资料在提到MapReduce的时候并未说明,容易造成困惑。

其实Google拿编程模型的名字直接作为计算框架的名字这种例子还有很多,比如GoogleDataflow。而MapReduce有两个含义,一般来说,在说到计算框架时,我们指的是开源社区的MapReduce计算框架,但随着新一代计算框架如Spark、Flink的崛起,开源社区的MapReduce计算框架在生产环境中使用得越来越少,逐渐退出舞台。

MapReduce模型将数据处理方式抽象为map和reduce,其中map也叫映射,顾名思义,它表现的是数据的一对一映射,通常完成数据转换的工作,如下图所示:


reduce被称为归约,它表示另外一种映射方式,通常完成聚合的工作,如下图所示:

圆角框可以看成是一个集合,里面的方框可以看成某条要处理的数据,箭头表示映射的方式和要执行的自定义函数,运用MapReduce编程思想,我们可以实现以下内容:

将数据集(输入数据)抽象成集合;

将数据处理过程用map与reduce进行表示;

在自定义函数中实现自己的逻辑。

这样就可以实现从输入数据到结果数据的处理流程(映射)了。

03并发与并行

一般来说,底层的东西越简单,那么上层的东西变化就越复杂,对于MapReduce编程模型来说,map与reduce的组合加上用户定义函数,对于业务的表现力是非常强的。这里举一个分组聚合的例子,如下图所示:

map端的用户自定义函数与map算子对原始数据人名进行了转换,生成了组标签:性别,reduce端的自定义函数与reduce算子对数据按照标签进行了聚合(汇总)。

MapReduce认为,再复杂的数据处理流程也无非是这两种映射方式的组合,例如map+map+reduce,或者reduce后面接map,等等,在我展示出的这张图里你可以看到相对复杂的一种组合形式:

很多支持函数式编程的语言,对于语言本身自带的集合数据结构,都会提供map、reduce算子。现在,我们可以很容易的将第一个圆角方框想象成一个数十条数据的集合,它是内存中的集合变量,那么要实现上图中的变换,对于计算机来说,难度并不大,就算数据量再大些,我们也可以考虑将不同方框和计算流程交给同一台计算机的CPU不同的核心进行计算,这就是我们说的并行和并发。

总结

版权声明:本文版权归属拉勾教育及该专栏作者,任何媒体、网站或个人未经本网协议授权不得转载、链接、转贴或以其他方式复制发布/发表,违者必究。

版权声明:本文版权归属拉勾教育及该专栏作者,任何媒体、网站或个人未经本网协议授权不得转载、链接、转贴或以其他方式复制发布/发表,违者必究。

文章版权声明:除非注明,否则均为盛联管理咨询有限公司原创文章,转载或复制请以超链接形式并注明出处。

上一个 穿越时空,元明清时期济南兴盛的书院

下一个 丰网“卖身”,顺丰、极兔双赢!加盟商怎么办?