MapReduce的过程:就是从输入杂乱、无规则的数据,通过自定义规则,切片,分区,在经过合并,归并操作,最后让其按规则输出,写入磁盘的过程。
1.输入切片Split
输入切片(inputSpilt):在进入map之前,需要经过切片,在我们不设置切片的大小时候,有两种规则:
1)默认切片大小=BlockSize,hadoop1.X是64M,hadoop2.X是128M;
2)文件本身的大小;
也可以自定义设置分片的大小。
每一个Split切片分配给一个mapTask。
2.环形内存缓冲区Buffer
数据在经过Map处理过后,会形成一个key-value的键值对,它并不会被立刻写入磁盘,而是会进入内存---也是环形内存缓冲区,它其实本质是一个数组,一个下标从0开始,不断增加,当达到一定的阀值的时候,就像可以容纳100条数据,当达到80条的时候,就会溢出写入磁盘。
3.分区、合并Combiner
在经历过环形缓冲区的数据,在经过partition,会按照自定义的规则进行排序,按照key值经行分区,在把具有相同key的经过合并,产生新的key-value。
在这次小合并会用到Mapper中的Combiner,正是这Combiner才会使他们合并。
无Combiner:
有Combiner:
同一个prititioner数据必然shuffle到同一个Reduce,将合并后的数据发送到相应的Reduce,prititioner必定会与Reduce tack个数保持一致。
4.归并Marge
当MapTask完成任务达到总数的5%之后,就会执行ReduceTask任务,每个ReduceTask默认启动5个copy数据从MapTask任务节点分别copy属于自己的数据,在经行Combiner,最后经过Merge生成最终的文件。
5.shuffle:
Map方法之后,Reduce方法之前的数据处理过程称之为Shuffle。








暂无数据