经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 大数据/云/AI » Hadoop » 查看文章
hadoop的企业优化
来源:cnblogs  作者:董秀才  时间:2018/10/10 8:57:41  对本文有异议

前言:

  Mapreduce程序的效率的瓶颈在于两点:

  1. 计算机性能:
  2.   CPU、内存、磁盘健康、网络
  3. I/O操作:
      数据倾斜
      mapreduce数量设置不合理
      map的运行时间太长,导致reduc的等待过久
      小文件过多
      大量的补课分块的超大文件
      spill(溢写)次数过多
      merge(合并)次数过多

MapReduce优化方法

  数据输入:

    (1)合并小文件:在执行任务前将小文件进行合并

    (2)采用CombineTextInputformat来作为输入,解决输入端大量小文件的场景。将多个小文件从逻辑上规划到一个切片中,这样,多个小文件就可以交给一个 maptask。     

      CombineTextInputFormat.setMaxInputSplitSize(job, 4194304);// 4m

      CombineTextInputFormat.setMinInputSplitSize(job, 2097152);// 2m

      job.setInputFormatClass(CombineTextInputFormat.class

  Map阶段:

    (1)减少溢写(spill)操作:通过调整 io.sort.mb 及 sort.spill.percent 参数值,增大触发spill 的内存上限,减少 spill 次数,从而减少磁盘 IO。

    (2)减少合并(merge)操作:通过调整 io.sort.factor 参数,增大 merge 的文件数目,减少 merge 的次数,从而缩短 mr 处理时间。

    (3)在不影响业务逻辑的前提下,先进行combine处理,减少I/O。

  Reduce阶段:

    (1)合理设置map和reduce的数量

    (2)设置map、reduce共存:调整 slowstart.completedmaps 参数,使 map 运行到一定程度后,reduce 也开始运行,减少reduce 的等待时间。

    (3)规避使用reduce

    (4)合理使用reduce端的buffer

  I/O传输:

    (1)采用数据压缩的方法,减少网络IO时间

    (2)使用sequenceFile二进制文件

  数据倾斜问题:

    (1)抽样和范围分区

    (2)自定义分区

    (3)Combine

    (4)采用Map join,尽量避免reduce join

  JVM重用:

    对于大量的小文件job,开启JVM重用会减少45%运行时间。 

    具体设置:mapreduce.job.jvm.numtasks 值在 10-20 之间。

    

 

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号