MapReduce虽是一项过时的技术,但是在面试时任然容易被面试官提问,这里简单的对MapReduce做一个了解并做了一张思维导图方便记忆:
整个MapReduce分为两大阶段:maptask和reducetask
maptask阶段分为数据读入,map运算,collect缓存,spill溢写,合并
reducetask阶段同样分为5个阶段:拷贝,合并,排序,reduce,output
map和reduce运算之间的过程统称为shuffle过程:
在这个过程中,我们可以对运算出的数据进行分区,排序,聚合等操作,shuffle过程贯穿MapReduce过程。
首先来讲maptask:
第一阶段read:
这里主要过程在submit阶段:
job提交流程的源码主要完成jobid的获取,jar包的拷贝,规划maptask数,写入配置文件,然后将其提交到yarn进行资源调度并开启maptask。
maptask默认情况下由切片数量决定,但是在小文件过多的情况下,可以自定义combineinputformat以减少map数量:
map阶段负责切分运算:
运算后将数据提交至缓存:
当缓存数据存储到80%时,溢出数据到磁盘:
在溢写过程中进行第一次分区排序,排序可以分为全排序,区内排序,二次排序。
这时如果数据发生了倾斜,还可以对数据提前进行combiner操作以减轻reducetask的负担:
最后将数据进行提交,每个maptask只生成一个文件:
至此,maptask结束,继续进入reducetask阶段,reducetask阶段比较简单,直接上图:
除此之外,MapReduce还有一些常用的操作如ETL数据清洗,join其他表等
这里提供一份思维导图希望大家指出错误: