Shuffle,即混洗、洗牌,顾名思义就是对数据打乱重新分配。Shuffle发生在Map输出至Reduce的输入过程之间。主要分为两部分
参数名 | 默认值 | 说明 |
mapreduce.task.io.sort.mb | 100MB |
Map输出时所使用的内存缓冲区大小 |
mapreduce.map.sort.spill.percent | 0.8 |
Map输出溢写到磁盘的内存阈值 |
mapreduce.task.io.sort.factor | 10 |
排序文件时一次可以合并的流数 |
mapreduce.map.output.compress | false |
Map输出是否压缩 |
mapredcue.map.output.compress.codec | Org.apache.hadoop.io.compress.DefaultCodec |
Map输出压缩的编解码器 |
参数 | 默认值 | 说明 |
mapreduce.reduce.shuffle.parallelcopies | 5 |
并发复制的线程数 |
mapreduce.task.io.sort.factor | 10 |
排序文件时一次可以合并的流数 |
mapreduce.reduce.shuffle.input.buffer.percent | 0.7 |
shuffle的复制阶段,用来存放map输出缓冲区占reduce堆内存的百分比 |
mapreduce.reduce.shuffle.merge.percent | 0.66 |
Reduce输出缓冲区的阈值,超过该比例将进行合并和溢写磁盘 |
mapreduce.reduce.merge.inmem.threshold | 1000 |
阈值,当累计的map输出文件超过该值,进行合并和溢写磁盘,0或者复制意味着该参数无效,合并和溢写只由mapreduce.reduce.shuffle.merge.percent控制 |
mapreduce.reduce.input.buffer.percent | 0.0 |
在reduce过程(开始reduce函数时),内存中保存map输出的空间占整个堆空间的比例。默认情况下,reduce任务开始前所有的map输出合并到磁盘。以便为reducer提供更多的内存,如果reducer需要的内存较少,可以增加此值以最小化磁盘访问次数 |
参考: