MR的调优

map端调优

io.sort.mb   int                  100   排序map输出时所使用的内存缓冲区的大小

io.sort.record.percent float 0.05 用作存储map输出记录边界的io.sort.mv的比例,神域的空间用来存储map输出记录本身, 1.0版本后删除该属性

io.sort.spill.percent float 0.8 map输出内存缓冲和用来开始磁盘溢出写过程的记录边界索引,这两者使用比例的阈值

io.sort.factor int 10 排序文件时,一次最多合并的流数,这个属性也在reduce中使用, 将此值增加到100也是很常见的

min.num.spills.for.combiner int 3 运行combiner所需要的最少溢出文件数(如果已制定了combiner)

mapred.compress.map.output boolean false 压缩map输出

mapred.map.output.compression.codec class name org.apache.hadoop.io.compress.DefaultCodec 用户压缩map输出的压缩编码器

tasktracker.http.threads int 40 每个tasktracker的工作线程数,用于将map输出到reducer这是集群范围的设置,不能由单个作业设置,在MR2中不使用。


总的原则是给shuffle过程精良多的提供内存空间, 然后有一个平衡问题,也就是要确保map函数和reduce函数能得到足够多的内存来运行,这就是为什么编写map函数和reducer函数要江梁少用内存,他们不能无限使用内存(避免在map中堆积数据)


运行map任务和reducer任务的JVM,其内存大小由mapred.child.java.ops属性设置,任务节点上的内存大小应该精良打,

在map端,可以通过避免多次溢出写磁盘来获得最佳性能;一次是最佳的情况。如果能估算map输出大小,就可以合理的设置io.sort.* 属性来尽可能减少溢出写的次数。具体而言,如果可以。就要增加io.sort.mb的值,MR计数器(spilled records) 计算在作业运行整个阶段中溢出写磁盘的记录数量,这对调优很有帮助,注意这个计数器包括map和reduce两端的溢出


在reducer端,中间数据全部驻留在内存时,就能获得最佳性能,在默认情况下,这是不可能发生的。 因为所有恩赐一般都预留给reduce函数, 但如果reduce函数的内存需求量不大,把mapred.inmem.merge.threshold设置为0, 把mapred.job.reduce.input.buffer.percen设置为 1.0或者一个更低的值,详见表6.2就可以提升性能。


reduce端的调优属性

mapred.reduce.parallelcopies int 5 用于把map输出复制到reducer的线程数

mapred.reduce.copy.backoff int 300 在声明失败之前,reducer获取一个map输出所花的时最大时间,以秒为单位,如果失败(根据指数后退),reduer可以在此时间内尝试重传。

io.sor.factor inr 10 排序文件时一次最多合并的流数量,这个属性也在map端使用

mapred.job.shuffle.input.buffer.percent float 0.7 在shuffle的复制阶段,分配给map输出的缓冲区占堆空间的百分比,

mapred.iob.shuffle.merge.percent float 0.66 map端输出缓冲区由mapred.job.shuffle.input.buffer.percent定义 的阈值使用比例,用于启动合并输出和磁盘溢出写的过程


mapred.inmem.merge.threshold int 1000 启动合并输出和磁盘溢出写过程的map输出的阈值数0或者更小的数字意味着没有阈值限制,溢出写行为由mapred.job.shuffle.merge.percent单独控制


mapred.iob.reduce.input.buffer.percent float 0.0 在reduce过程中,在内存中保持map输出的空间站整个对空间的比例,reduce

阶段开始时,内存中的map输出大小不能大于这个值。默认情况下,在recue的任务开始之前,所有map输出给合并到磁盘上,以便为reducer提供尽可能多个内存,然后,如果reduer需要的内存较少,可以增加比值来最小化访问磁盘的次数。


更加常见的情况是hadoop使用默认的4kb的缓冲区,这是很低的, 因此应该在集群中增加这个值,通过设置io.file.buffer.size来设置

2008年 hadoop通过在TB字节排序基准测试中获取, 他使用了一个优化方法即将中间数据保存在reduce端的内存中。。









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值