zoukankan      html  css  js  c++  java
  • hadoop的企业优化

    前言:

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

    计算机性能:
      CPU、内存、磁盘健康、网络
    I/O操作:
      数据倾斜
      map和reduce数量设置不合理
      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 之间。

        

     

  • 相关阅读:
    学习总结javascript和ajax,php,和css
    css基础二
    JQUERY基础
    JS基础与DOM操作(一)
    div布局
    样式表
    框架及其他小技巧
    表格与表单
    HTML基础
    二阶段测试
  • 原文地址:https://www.cnblogs.com/dongxiucai/p/9759826.html
Copyright © 2011-2022 走看看