Hadoop优化

一、影响MR程序效率的因素

  1.计算机性能:

  CPU、内存、磁盘、网络,

  计算机的性能会影响MR程序的速度与效率

  2.I/O方面

   1)数据倾斜(代码优化)

   2)map和reduce数量设置不合理(通过配置文件后代码中设置)

   3)map运行时间过长,导致reduce等待时间过长

   4)小文件过多(浪费元数据资源,CombineTextInputFormat)

   5)不可分快的超大文件(不断溢写)

   6)多个溢写小文件需要多次合并。

 

二、MR的优化方法

  MR优化的六个方面:数据输入、map阶段、reduce阶段、IO传输、数据倾斜、参数调优

  1.数据输入

    1)合并小文件:在执行mr任务前就进行小文件合并

    2)采用CombineTextInputFormat来作为输入,解决输入端大量小文件的场景

    MR程序不适合处理大量小文件

  2.Map阶段

    1)减少溢写次数:

    //修改内存大小:mapreduce.task.io.sort.mb

    //修改默认溢写百分百:mapreduce.mps.sort.spill.percent

    2)减少合并次数

    //mapreduce.task.io.sort.factor,将merge值增大

    3)在shuffle阶段不影响业务逻辑情况下使用Combiner

  3.Reduce阶段

    1)设置合理的map与reduce个数

    //map可以通过文件切块的大小,或小文件合并改变maptask数量

    //reduce通过分区partitioner,setNumReduceTasks改变reducetask数量

    2)设置map/reduce共存

   //即map允许到一定程度后,启动reduce减少reduce的等待时间

   //mapreduce.job.reduce.slowstart.completedfmaps(参数越小reduce等待时间越少)

   //合理设置reduce端的buffer:mapreduce.reduce.markreset.buffer.percent

  4.数据传输

    1)数据压缩

    2)使用SequenceFile,它是二进制文件,使字节之间紧密度更高,提高效率。

  5.数据倾斜

    1)进行范围分区

    2)自定义分区

    3)Combiner

    4)能用map join坚决不用reduce join

  6.参数调优

    1)CPU

    //程序map阶段默认使用cpu核心数量:mapreduce.map.cpu.vcores

     //程序reduce阶段more使用cpu核心数量:mapreduce.reduce.cpu.vcores

    2)内存

    //一个maptask可以使用的最大内存:mapreduce.map.memory.mb

    //一个reducetask可以使用的最大内存:mapredcue.reduce.memory.mb

    3)并行度

    //reduce去map端拿数据时的并行度:mapreduce.reduce.shuffle.parallelcopies

转载于:https://www.cnblogs.com/HelloBigTable/p/10669164.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值