5.2.3 Copy阶段的优化

操作场景

对Map的中间结果进行压缩,当数据量大时,会显著减少网络传输的数据量,但是也因为多了压缩和解压,带来了更多的CPU消耗。因此需要做好权衡。当任务属于网络瓶颈类型时,压缩Map中间结果效果明显。

shuffle 阶段为reduce 全面拷贝map任务成功结束之后产生的中间结果,如果上面map任务采用了压缩的方式,那么reduce 将map任务中间结果拷贝过来后首先进行解压缩,这一切是在reduce的缓存中做的,当然也会占用一部分cpu。为了优化reduce的执行时间,reduce也不是等到所有的map数据都拷贝过来的时候才开始运行reduce任务,而是当job执行完第一个map任务时开始运行的。

reduce 在shuffle阶段 实际上是从不同的并且已经完成的map上去下载属于自己的数据,由于map任务数很多,所有这个copy过程是并行的,既同时有许多个reduce取拷贝map,这个并行的线程是通过“mapreduce.reduce.shuffle.parallelcopies”参数指定,默认为10个,也就是说无论map的任务数是多少个,默认情况下一次只能有10个reduce的线程去拷贝map任务的执行结果。所以当map任务数很多的情况下可以适当的调整该参数,这样可以让reduce快速的获得运行数据来完成任务。

操作步骤

参数名 描述
mapreduce.map.output.compress客户端参数 默认为ture开启
mapreduce.map.output.compress.codec客户端参数 默认为org.apache.hadoop.io.compress.SnappyCodec
mapreduce.reduce.shuffle.parallelcopies客户端参数 默认为10,增大参数配置reduce拷贝map文件的线程数,带宽较大时可以增大此配置

results matching ""

    No results matching ""