@Arslan6and6
2016-05-02T12:44:38.000000Z
字数 1278
阅读 688
第四章、深入Hadoop
2.x
---MapReduce Shuffle过程
以下几点注意,必须在作业文档中体现:
1) Map Shufffle 主要做了哪些事?哪些可以设置及如何设置?
2) Reduce Shhuffle 主要做了哪些事?哪些可以设置及如何设置?
3) 在 Shuffle 阶段中的 Comparator 如何理解作用?
4) MapReducce 执行过程中中间数据的压缩配置
将Map的输出结果如< marpreduce,1 >、< map,1 >,写入内存的环形缓冲区,该环形缓冲区默认大小为100M。当写入数据大小超过或达到环形缓冲区容量阈值(默认为80%),则spill溢写如磁盘。
reduce数量默认为1,对应输出文件夹(如output)中只有1个part文件。
可以按照业务需求和性能测试结果规定reduce数量。业务需求如过滤A-Z,a-z,0-9等3个任务,则需要3个reduce task。
在Java文件中,代码为job.setNumReduceTasks(3);3为举例设置数量。
配置属性io.sort.factor控制着一次最多能合并多少流,默认值是10。
combiner合并:
如果已指定combiner,并且溢写次数至少为3时(min.num.spills.for.combine属性的值),combiner就在输出文件被写之前执行。运行combiner的意义在于使map输出更紧凑,从而只有少数数据被写到本地磁盘然后传给reducer。
compress压缩:
map输出结果写到磁盘前进行压缩,会让写入磁盘的速度更快,节约磁盘空间和减少传给reduce的数据量。默认情况map输出结果不能压缩,但是只要将mapred.compress.map.output设置为true,就可以启动此功能。
copy mapoutput datas——从不同map端相同分区(应归集于本reduce端)的文件复制到本reduce端,并进行合并。
sort排序——将合并后的文件同样按照key进行排序。
group分组——相同key的value组合在一起,得到类似 < hadoop,(1,1,1) >、< map,(1,1) >的结果。