MapReduce-shuffle
2019-10-14 16:54:56 0 举报
mapreduce shuffle
作者其他创作
大纲/内容
类似map1
http复制数据
READ
Map端的shuffle过程是对Map的结果进行分区(partition)、排序(sort)和分割(spill)
HDFS
map1
map2
当其中一个map完成后,会通知所有reduce进行对应分区数据复制,仅所有map端数据复制完成后,才进行真正计算
复制
sort spill
reduce1
WRITE
BUFFER
TASKTRACKER
每个map有一个环形内存缓冲区,用于存储任务的输出。默认大小100MB(io.sort.mb属性)。 ③一旦达到阀值80%(io.sort.spil l.percent),一个后台线程就把内容写到(spill:溢写)Linux本地磁盘中的指定目录(mapred.local.dir)下的新建的一个溢出写文件。在这一步会执行两个操作排序和Combiner(前提是设置了Combiner)。缓冲区的数据写到磁盘前,会对它进行一个二次快速排序,首先根据数据所属的partition (分区)排序,然后每个partition 中再按Key 排序。
merge
(file.out)partiton1
每个map完成
reduce2
map....
(file.out)partition...
(file.out)partition2
每次溢写会在磁盘上生成一个溢写文件,如果map的输出结果很大,有多次这样的溢写发生,磁盘上相应的就会有多个溢写文件存在。而如果map的输出很小以至于最终也没有到达阀值,那最后会将其缓冲区的内容写入磁盘。 因为最终的文件只有一个,所以需要将这些溢写文件归并到一起, 这个过程就叫做Merge。因为merge是将多个溢写文件合并到一个文件
多次spill文件merge 并拆分区 放入文件对应的segment
local io
reduce..
类似reduce1
io
JOBTRACKER
收藏
0 条评论
下一页