Hadoop中的Shuffle(17)

Hadoop中的Shuffle(17)_第1张图片

Shuffle描述着数据从Map Task输出到Reduce Task输入的这段过程。

Map端

            1、每个Map有一个环形内存缓冲区,用于存储任务的输出,默认大小100MB(io.sort.mb属性),一旦达到阀值

                 0.8(io.sort.spill.percent),一个后台线程把内容写到(spill)磁盘的指定目录(mapred.local.dir)下的新建的一个

                 溢出文件。

            2、在写入磁盘前,要Partitioner,Sort,如果有Combiner(聚合),Combiner排序后在写入数据。

            3、等最后把记录写完,合并全部溢出写文件为一个分区且排序的文件。

Reduce端

             1、Reduce通过Http方式得到输出的文件的分区。

             2、TaskTracker为分区文件运行Reduce任务。复制阶段把Map输出复制到Reduce的内存或磁盘。一个Map任                     务完成,Reduce就开始复制输出。

             3、排序阶段合并Map输出,然后走Reduce阶段。

             注意:在有些情况下,也有可能没有任何的Reduce,当前数据处理可以完全并行时,即无需混洗(shuffle),可能

                       会出现无Reduce任务的情况,在这种情况下,唯一的非本地节点数据传输是Map任务将结果写入HDFS.


                                                                                                                        Name:Xr

                                                                                                                          Date:2014-03-04 21:55

你可能感兴趣的:(Hadoop中的Shuffle(17))