前言:

  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 之间。

    

 

hadoop的企业优化的更多相关文章

  1. Hadoop生态圈-hive优化手段-作业和查询优化

    Hadoop生态圈-hive优化手段-作业和查询优化 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  2. 数据开源工具:Hadoop为企业带来什么?

    熟悉大数据的人一定不会对大名鼎鼎的Hadoop工具陌生,Hadoop是一个由Apache基金会所开发的分布式系统基础架构.用户可以在不了解分布式底层细节的情况下,开发分布式程序.Hadoop的框架最核 ...

  3. haodoop企业优化

    MapReduce 跑的慢的原因 MapReduce程序效率的瓶颈在于两点 计算机性能 CPU,内存,磁盘健康,网络 I/O操作优化 数据倾斜 Map和Reduce数设置不合理 Map运行时间太长,导 ...

  4. nginx配置文件企业优化

    1.1 企业规范优化Nginx配置文件 第一个里程碑:创建扩展目录,生成虚拟主机配置文件 mkdir extra sed -n '10,15p' nginx.conf >extra/www.co ...

  5. oa办公系统快速开发工具,助力企业优化升级

    随着互联网的快速发展.信息化 IT 技术的不断进步.移动互联新技术的兴起,不管是大的集团企业还是中小型企业,纸质化的办公模式已不能满足现有需求,构建oa平台,为员工提供高效的办公环境尤其重要. 我们先 ...

  6. hadoop 任务执行优化

    任务执行优化 1. 推测式执行: 如果jobtracker 发现有拖后的任务,会再启动一个相同的备份任务,然后哪个先执行完就会去kill掉另一个,因此会在监控页面上经常能看到正常执行完的作业会有被ki ...

  7. Hadoop记录-NameNode优化

    1.NameNode启动过程 加载FSImage: 回放EditLog: 执行CheckPoint(非必须步骤,结合实际情况和参数确定,后续详述): 收集所有DataNode的注册和数据块汇报. 采用 ...

  8. Hive 的企业优化

    优化 数据优化 一.从大表拆分成小表(更快地检索) 引用:Hive LanguageManual DDL eg2:常用于分表 create table if not exists default.ce ...

  9. 【Hadoop】Hadoop MR 性能优化 Combiner机制

    1.概念 2.参考资料 提高hadoop的mapreduce job效率笔记之二(尽量的用Combiner) :http://sishuo(k).com/forum/blogPost/list/582 ...

随机推荐

  1. PLSQL基础学习-文字

    --oracle 练习: /********************PL/SQL编程基础*******************************/ --firstday -->>&g ...

  2. zabbix教程

    zabbix官方文档:https://www.zabbix.com/documentation/current/zh/manual zabbix视频教程:https://www.bilibili.co ...

  3. Autofac与AOP功能例子

    using Autofac.Extras.DynamicProxy; using System; using System.Collections.Generic; using System.Linq ...

  4. 背水一战 Windows 10 (87) - 文件系统: 获取文件的属性, 修改文件的属性, 获取文件的缩略图

    [源码下载] 背水一战 Windows 10 (87) - 文件系统: 获取文件的属性, 修改文件的属性, 获取文件的缩略图 作者:webabcd 介绍背水一战 Windows 10 之 文件系统 获 ...

  5. CPU Hardwar

    GPU负责把线程块分配到各个SM上处理. CUDA对申请的线程块何时运行,以及在哪个SM上运行是没有保证的.这恰好是GPU的优势,这种方式带来了灵活性,不需程序根据SM的数量去配置程序. 但是一个bl ...

  6. go操作redis

    package main import ( "fmt" "github.com/gomodule/redigo/redis" ) func main() { c ...

  7. vue moment库格式化处理后端传的日期

    开篇 日期时间格式前端和后端都可以处理,我比较推荐前端来处理(定制化高),下面我就介绍下两种处理的方式 后端处理 django默认不经处理传给前端的日期格式为2018-08-26T19:53:36.5 ...

  8. 线程误区-join,wait(里边还是调用的wait)

    1.一个线程执行结束后会执行该线程自身对象的notifyAll方法,这个是在jvm中实现的. 2.join的作用是:当我们调用某个线程的这个方法时,这个方法会挂起调用线程,直到被调用线程(thread ...

  9. 如何用java POI将word中的内容导入到mysql数据库中

    由于作业需要,要求我们将word文档中的数据直接导入到mysql中,在网上找了很常时间,终于将其解决. 由于比较初级,所以处理的word文档是那种比较规范的那种,条例比较清晰,设计的思路也比较简单,就 ...

  10. 【2019北京集训测试赛(十三)】数据(sj) 冷静分析

    题目大意:给你一个代表区间$[1,n]$的线段树,问你随机访问区间$[1,n]$中的一个子区间,覆盖到的线段树节点个数的期望(需要乘上$\frac{n(n-1)}{2}$后输出). 数据范围:$n≤1 ...