大数据小白系列 —— MapReduce流程的深入说明

上一期我们介绍了MR的基本流程与概念,本期稍微深入了解一下这个流程,尤其是比较重要但相对较少被提及的Shuffling过程。

 

Mapping

上期我们说过,每一个mapper进程接收并处理一块数据,这块数据的大小默认就是一个HDFS数据块大小。

 

Mapper处理数据时,基于性能考虑,会使用缓存,缓存的大小有一个默认值(比如100MB),满了之后,将会写入磁盘文件。

 

不过在写入之前,会在内存中进行分区(partition),分区的数量取决于reducer的数量,实际上也就是由MR框架决定,例如上图中是3个。在每个分区内,数据会被按key进行排序,都完成之后,这些数据才会被写入磁盘。

 

由于缓存可能多次被占满(上图中是3次),从而导致多次磁盘写入,产生多个磁盘文件,所以每个mapper结束之后,需要对自己所产生的多个文件进行合并(merge),合并出来的大文件同样进行分区及分区内的排序。

 

通常,这个合并后的文件会被压缩,以便减少磁盘存储成本,同时也有利于降低shuffling时的网络传输成本。

 

这些都完成之后,这个所谓的“中间结果”文件,就静静地等待reducer来获取。

 

Reducing

当一个mapper完成工作之后,所有的reducer们都会收到通知,开始去取该mapper产生的数据文件,不同的reducer取走不同的分区内的数据。

 

所以取数这一步,并不是等到所有的mapper都完成才开始,而是某个mapper一完成,reducer就会去取。

 

当所有mapper都完成,所有的中间结果都已被拷贝至reducer,才开始真正的reduce操作,对取来的多个分区数据进行合并和统一排序,最终用户所写的reduce方法会作用在排序后的每一条数据上,以产生最终结果。

  

Shuffling

上述所说的发生在mapping与reducing之间的数据排序、合并、及拷贝的过程,包括mapping侧的一部分好reducing侧的一部分,即图中红色框出部分,统称为shuffling。

 

这一步骤的特点是什么?就是重磁盘IO、重网络IO,知道这一点很重要。

 

- END - 

 

好了,本期就先到这儿,下一期讲讲MR的优点、局限性等内容。

喜欢本文的朋友们,欢迎长按下图关注订阅号程序员杂书馆,提前获得更多更新内容,以及领取大数据及Java经典资料。

posted @ 2019-03-16 22:13  Morven.Huang  阅读(...)  评论(...编辑  收藏