MapReduce:
在数据被切分以后,进入map阶段,会向环形缓冲区中写入数据。环形缓冲区的大小默认是100m,split的大小默认是128M。在环形缓冲区中一边写入数据,一边写入这些数据的索引。当达到80%以后,这部分会被锁定,往剩下的20%中写入数据,一边写入索引,一边写入数据。这样值循环。假如缓冲区都写满了,数据还没有溢写到磁盘,那么map就会阻塞,不再往里边写数据了。
map端溢写的时候是spill,一边排序,一边溢写,这时候的排序使用的是归并排序算法。
溢写之后是combiner:合并。在map端对同一个key进行合并。环形缓冲区的大小达到80%以后会进行排序和溢写。缓冲区中的数据溢写3次之后会生成3个小文件,会对这3个小文件再次进行combiner,这个数字可以调整。也就是说溢写次数大于3次(可修改),会触发combiner操作。
reduce阶段有三个操作:
copy
sort
reduce