什么是mapreduce?
Mapreduce中,mapper阶段处理的数据如何传递给reducer阶段,是MapReduce框架中最关键的一个流程,这个流程就是Shuffle流程,很多人解释mapreduce是洗牌(打乱,打散),但是本质意义上的shuffle更像是一个逆过程,是将原来杂乱无章的数据变得更加有规律,更结构化,使计算过程更便捷的一个过程
为什么mapreduce需要shuffle流程
我们每个人其实都知道mapreduce是分布式计算抽象化成的两个函数,就是map和reduce
Map就是映射,负责数据的过滤分发;reduce是规约,负责数据的计算合并。Reduce需要远程拉取map输出落地的数据,故而reduce的输入就是map的输出,reduce还需要通过shuffle阶段来获取其数据
Shuffle流程解析
首先数据文件从hdfs拿到切分成block块,然后将每个块分片进行计算,每个切片会进入独立的环形内存缓冲区,在达到80%的阈值的时候spill溢写,此时会生成大量小文件,通过merge合并以后把小文件合并成临时文件落地到磁盘,再由reduce单独起一个线程去拉去这些数据进入一个环形内存缓冲区,同时进行80%阈值进行spill溢写,这里也会有小文件的生成,同样也得进行merge合并,最后进入reduce进行最后的合并处理阶段
领取专属 10元无门槛券
私享最新 技术干货