开发中关于mapreduce中参数的调优策略

       使用hadoop进行大数据运算,当数据量及其大时,那么对MapReduce性能的调优重要性不言而喻。尤其是Shuffle过程中的参数配置对作业的总执行时间影响特别大。下面基于官网和工作中的情况总结和相关的调优策略。

     1.关于map端的调优属性   

属性名称类型默认值说明
mapreduce.task.io.sort.mbint 100配置排序map输出时所能使用的内存缓冲区的大小,默认100Mb,实际开发中可以适当设置大一些。要尽量避免多次溢出写磁盘的的情况,一次溢出写是最佳性能的情况,如果可以,实际开发中可以尽量增加mapreduce.task.io.sort.mb的值。
mapreduce.map.sort.spill.percentfloat0.80map输出内存缓冲和用来开始磁盘溢出写过程的记录边界索引的阈值,即最大使用环形缓冲内存的阈值。一般默认是80%。也可以直接设置为100%
mapreduce.task.io.sort.factorint10排序文件时,一次最多合并的流数。日常开发中可以将这个值设置为100
mapreduce.map.combine.minispillsint3运行combiner所需要的最小溢出文件数,一般溢出文件数小于3个,就不会启动combiner进行合并,否则因为combiner会增加开销
mapreduce.map.output.compressBooleanfalse是否压缩map的输出,如果是大文件的话,可以开启压缩,这样好处是减少网络IO,加速传输
mapreduce.map.output.compress.codecClass nameorg.apache.hadoop.io.compress.DefalutCo-dec
用于map输出的压缩编码器。
注意:大文件来说,一般不要使用不支持切分整个文件的压缩格式,这样会失去数据的本地特性,造成mapreduce应用效率低下。常用的压缩有LZO.LZ4,gzip,bzip2,snappy等等。
mapreduce.shuffle.max.threadsint0每个nodemanager工作的线程数,用于将map输出到reducer.这是集群范围的设置,不能由单一的作业区设置。0表示使用Netty默认值,即两倍于可用的 

    2.关于reduce端的调优属性

    通常来说,在reduce端如果把中间数据全部驻留在内存中,那么肯定可以获取最佳性能,但默认情况下,不会发生。因为默认要预留很多内存给reduce函数进行运算。

属性名称类型默认值说明
mapreduce.reduce.shuffle.palallelcopiesint    5用于把map输出复制到reducer端的线程数

mapreduce.reduce.shuffle.maxfetchfailuresint    10在声明失败之前,reducer获取一个map输出所允许花的最大时间

mapreduce.task.io.sort.factorint   10排序文件时,一次最多合并的流数。日常开发中可以将这个值设置为100

mapreduce.reduce.shuffle.input.buffer.percnetfloat   0.70在shuffle的复制阶段,分配给map输出的缓冲区占堆空间的百分比。

mapreduce.reduce.shuffle.merge.percnetfloat   0.66map输出缓冲区的阈值使用比例,用于启动合并输出和磁盘溢出写的过程

mapreduce.reduce.merge.inmem.thresholdint   1000启动合并输出和磁盘溢出写过程的map的输出阈值。0或者更小表示没有阈值限制。溢出写行为由上面的mapreduce.reduce.shuffle.merge.percent控制。

mapreduce.reduce.input.buffer.percentfloat    0.0在reduce的过程中,在内存中保存map输出的空间占堆空间的比例,reduce阶段开始时,内存中的map的输出大小不能大于这个值。默认情况下,在reduce开始任务之前,所有的map输出都合并到磁盘上,以便为reducer提供尽可能多的内存。然而,如果reducer需要的内存比较小,可以通过增加这个值来最小化访问磁盘的的次数。进而提高程序运行效率。比如2008年hadoop在通用的TB字节的排序基准测试中获胜,其中很重要的一个优化方法就是 :将中间数据保存到reduce端的内存中

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

涤生大数据

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值