其他分享
首页 > 其他分享> > MapReduce底层原理和执行流程经典讲解【小二讲堂】

MapReduce底层原理和执行流程经典讲解【小二讲堂】

作者:互联网

本片博客是小二精心所得,评论席可与小二探讨!!!
小二讲堂:https://blog.csdn.net/Mirror_w
MapReduce的原语“相同的key为一组,调用一次reduce,方法内迭代这组数据并进行计算”

一、MapReduce

MapReduce可以集群中可靠地、容错地、并行处理、TB级别的数据。
mapreduce分布式计算框架,分为map阶段和reduce阶段,map端又分为数据的切片和shuffle两个阶段,reduce又分为shuffle和reduce计算两个方面。最后reduce又将数据输出到hdfs中进行保存。而在mapreduce的过程中map的输出则是renduce的输入。map端的输出类型和redcue端的输入类型一致。

二、MapReduce作业流程分析

分步执行详细解析:

三、MapReduce的shuffle

1.partititon分区

当map端进行数据切分后每个切片对应着一个map。然后根据map的个数%reduce的个数,这样所有节点上的数据都会被分区,例如取模之后为0分区,1分区,2分区,reduce会在进行网络调用的时候会将对应分区上的数据调用一个reduce来进行执行,这样将大量的map任务平均到reducer任务上提高了很高的工作效率

2.combiner压缩合并

当map端的数据较大的时候,这里在reduce和map端会产生大量的网络IO操作,这样会影响mr的工作效率,为了避免这种情况,设置combiner对数据进行合并压缩这里的合并压缩不是随便的进行压缩,combiner是针对key的压缩,将map端key值相同数据进行压缩,即对分区的数据进行压缩,当map端数据过大时,经过分区后,分区内的数据过大,这时可以利用combiner对这些数据进行压缩,这样大大减少了网络IO的操作,比如有三个分区0分区,1分区,2分区,每个分区里有100个小文件,三个分区对应的reduce有reduce0,redcuce1,reduce2,reduce0调用0分区的数据就会经过网络传输100次,而经过combiner对0分区的数据合并若情况允许(合并压缩后文件不大即可),则将数据压缩成一份数据,这样reduce1对0分区的数据只进行一次拉取即可完成,这样这里的一次IO量针对前面的100次IO,减少了很多。------这里的combiner是由条件的当溢写的文件小于3个时不会进行combine。大于等于3是才会进行combiner

3.MapReduce的输入输出模型图示

在这里插入图片描述
图示讲解MR:
在这里插入图片描述

shuffle中的sort和combiner–源码分析

源码分析:https://blog.csdn.net/Mirror_w/article/details/89420501
当环形缓冲区中的数据达到80%阈值之后,会向磁盘进行溢写,但是在溢写之前会先进行sort排序,这里的排序是快速排序(面试题快速排序),之后会进行归并排序。
在这里插入图片描述
快速排序:
对环形缓冲区中的数据进行创建一个对应的索引,排序的时候对这些索引进行排序–采用快速排序
合并:
在数据向磁盘溢写的时候,如果数据想磁盘溢写小文件个数小于3,则不会这两个文件进行合并。当溢写的小文件个数大于3是,会对这些小文件进行合并。减少reduce端拉取时的IO量。

小二建议读者在看本篇博文后阅读MapReduce源码分析
MapReduce源码分析:https://blog.csdn.net/Mirror_w/article/details/89420501
小二精讲:https://blog.csdn.net/Mirror_w/article/details/89301229

标签:map,分区,reduce,MapReduce,任务,讲堂,讲解,数据,进行
来源: https://blog.csdn.net/Mirror_w/article/details/89421705