MapReduce框架原理

MapReduce流程详解

一、MapReduce流程图
MapReduce框架原理
如上图所示,就是一个map,reduce的过程,其中包括了map过程,shuffle过程,reduce过程

二、关于shuffle过程详解
1:mapTask收集我们map方法输出的<k,v>,放入到内存缓冲区中。
2:从缓冲区中以【80% * 缓冲区大小】 的文件溢写到磁盘,可能是多个文件。
3:多个溢写出的文件会被合并成大的溢出文件。
4:溢出的过程中,以及合并的过程中,都要进行partitioner分区,和针对key排序
5:reduceTask根据自己的分区号去各个mapTask节点上拉去对应的mapTask处理完的结果文件。
6:reduceTask会取到同一个分区不同mapTask的结果文件,reduceTask会对这些文件再进行合并,并排序。
7:合并成大文件之后shuffle结束了,后面进入到reduceTask自己的运算逻辑,从文件中取出一个个的k-v然后分组,调用用户自定义的reduce方法。
注意:
1:缓存区的大小会影响到MapReduce的执行效率,缓冲区的大小通过参数:io.sort.mb 默认100M。:
2:mapTask的数量有原始文件的切片数来决定,默认情况下切片大小=block的大小,但是切片需要注意当第二个切片小于当前切片的10%,就会不再切片,例如:默认128M切片一次,但是130M不会切成两个切片。