[关闭]
@Arslan6and6 2016-05-02T12:44:38.000000Z 字数 1278 阅读 688

【作业六】殷杰

第四章、深入Hadoop 2.x

---MapReduce Shuffle过程

画图加文件描述讲解 MapRReduce Shuffle 过程。

以下几点注意,必须在作业文档中体现:

1) Map Shufffle 主要做了哪些事?哪些可以设置及如何设置?

2) Reduce Shhuffle 主要做了哪些事?哪些可以设置及如何设置?

3) 在 Shuffle 阶段中的 Comparator 如何理解作用?

4) MapReducce 执行过程中中间数据的压缩配置

1) Map Shufffle 主要做了哪些事?哪些可以设置及如何设置?

Map Shufffle.bmp-2612.3kB

一、内存;

将Map的输出结果如< marpreduce,1 >、< map,1 >,写入内存的环形缓冲区,该环形缓冲区默认大小为100M。当写入数据大小超过或达到环形缓冲区容量阈值(默认为80%),则spill溢写如磁盘。

二、spill溢写入磁盘

partition——在写到磁盘前,后台线程根据数据最终被传送到的reduce,将数据在内存中划分成相应的分区。

reduce数量默认为1,对应输出文件夹(如output)中只有1个part文件。
可以按照业务需求和性能测试结果规定reduce数量。业务需求如过滤A-Z,a-z,0-9等3个任务,则需要3个reduce task。
在Java文件中,代码为job.setNumReduceTasks(3);3为举例设置数量。

sort——对分区中的数据按照 < key,value >中的key进行排序,以便后续合并。
spill——一旦内存缓存区达到溢写阈值,就会在磁盘中按照mapreduce.loacl.dir属性指定的目录创建一个新临时文件,因此在map任务写入其最后一个输出记录后,会有若干个溢写文件。
merge——将若干个溢写文件合并再次进行排序。至此,溢写文件被合并成一个已分区并且已排序的输出文件。

配置属性io.sort.factor控制着一次最多能合并多少流,默认值是10。

Map Shufffle调优

combiner合并:
如果已指定combiner,并且溢写次数至少为3时(min.num.spills.for.combine属性的值),combiner就在输出文件被写之前执行。运行combiner的意义在于使map输出更紧凑,从而只有少数数据被写到本地磁盘然后传给reducer。
compress压缩:
map输出结果写到磁盘前进行压缩,会让写入磁盘的速度更快,节约磁盘空间和减少传给reduce的数据量。默认情况map输出结果不能压缩,但是只要将mapred.compress.map.output设置为true,就可以启动此功能。

2) Reduce Shhuffle 主要做了哪些事?哪些可以设置及如何设置?

Reduce Shhuffle.bmp-2187.1kB
copy mapoutput datas——从不同map端相同分区(应归集于本reduce端)的文件复制到本reduce端,并进行合并。
sort排序——将合并后的文件同样按照key进行排序。
group分组——相同key的value组合在一起,得到类似 < hadoop,(1,1,1) >、< map,(1,1) >的结果。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注