1:官方图解
上图主要分为三个阶段:
Map:分割数据 Reduce:聚合数据 重点在Shuffle(面试)
Shuffing包含:{partition spill(sort+combiner) merge}
shuffling具体过程如下:
1.Map端
1**.Input Split分配给Map
2.Map过程进行处理**,Mapper任务会接收输入分片,然后不断的调用map函数,对记录进行处理。处理完毕后,转换为新的
3.Map的输出结果缓存在内存里
4.内存中进行Partition,默认是HashPartitioner(采用取模hash (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks), 目的是将map的结果分给不同的reducer,有几个Partition,就有几个reducer
5.Sort:内存中在Partition结束后,对于不同分区的数据,会按照key进行排序
6.group by对于排序后的
7.排序分组结束后,相同的key在一起组成了一个列表,如果设置过combiner,就合并数据,减少写入磁盘的记录数(combiner本质就是一个reducer)
8.当内存中buffer(default 512M)达到阈值(default 80%),就会把记录**spill(即溢写)**到磁盘中
9.Map结束时会把spill出来的多个文件合并成一个,merge过程最多10(默认)个文件同时merge成一个文件,多余的文件分多次merge,merge过程是merge sort的算法。
10.Map端shuffle完毕,数据都有序的存放在磁盘里,等待reducer来拿取
2.reduce端
1. Copy phase: reducer的后台进程(default 5个)到被Application Master (Hadoop 2.2)指定的机器上将map的output拷贝到本地,先拷贝到内存,内存满了就拷贝的磁盘
2. Sort phase(Merge phase): Reduer采用merge sort,将来自各个map的data进行merge, merge成有序的更大的文件
3. Reduce



