首页 > 其他 > 详细

MapReduce 编程 系列十一 Map阶段的调优

时间:2014-10-03 23:39:05      阅读:464      评论:0      收藏:0      [点我收藏+]

MapOutputBuffer

对于每一个Map,都有一个内存buffer用来缓存中间结果,这不仅可以缓存,而且还可以用来排序,被称为MapOutputBuffer, 设置这个buffer大小的配置是

io.sort.mb

默认值是100MB.

一般当buffer被使用到一定比例,就会将Map的中间结果往磁盘上写,这个比例的配置是:

io.sort.spill.percent

默认值是80%或者0.8.

在内存中排序缓存的过程叫做sort,而当超过上面的比例在磁盘上写入中间结果的过程称之为spill.

如果能够追踪到sort和spill的状态,就可以通过调整上面两个参数对Map进行优化。


Merge

Map的输出结果,最后会变成多个spill文件写入到磁盘上,需要将它们合并成一个文件,这个阶段称作merge.

每次并行merge多少个spill文件,有一个配置参数:io.sort.factor。

默认为10, 如果文件很多,影响到了merge阶段完成的速度,可以适当调大。


压缩

设置mapred.output.compress为true或者false,可以控制map的输出结果文件变为压缩或者不压缩。

同时可以指定压缩格式,用参数mapred.output.compression.codec,可选值为:

zipCodec,LzoCodec,BZip2Codec,LzmaCodec

选择压缩主要的时机是当磁盘I/O成了瓶颈,而不是CPU计算成瓶颈时。

压缩格式的选择也是在压缩时间,CPU利用率和磁盘空间三者间做平衡。



其他参数参考官方文档:

https://hadoop.apache.org/docs/r1.0.4/mapred-default.html




MapReduce 编程 系列十一 Map阶段的调优

原文:http://blog.csdn.net/csfreebird/article/details/39760959

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!