一、影响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

最新文章

  1. ASP.NET Core的配置(1):读取配置信息
  2. xtrabackup: error: last checkpoint LSN (3409281307) is larger than last copied LSN (3409274368)
  3. C++浅析——继承类内存分布和虚析构函数
  4. 一个IP能建立的最大连接数是多少?
  5. TF Boys (TensorFlow Boys ) 养成记(六)
  6. MVC5 + EF6 + Bootstrap3 (10) 数据查询页面
  7. JavaScript DOM 编程艺术(第2版)读书笔记(6)
  8. Hashtable HashMap
  9. pygame简单动态图 & 动态图片的移动
  10. [UNIX环境高级编程](第三版)中apue.h的问题
  11. html.ex.day01
  12. 虚拟环境管理工具virtualenvwrapper-win初试
  13. SOLR搭建企业搜索平台
  14. 探究Java中Map类
  15. session与cookie-----2017-05-08
  16. 【有意思的BUG】客户端无厘头 已连网的场景初始化太慢 未连网的场景异常崩溃
  17. python-猜数字小练习
  18. 219. 存在重复元素 II
  19. openresty 集成 keycloak-oauth-oidc
  20. 配置nginx虚拟目录配置文件支持tp的pathinfo

热门文章

  1. 树莓派安装 MySQL 时出现错误的解决方法
  2. jQuery使用(十二):工具方法之ajax的无忧回调(优雅的代码风格)
  3. Python——安居客租房信息爬取(以南昌为例)
  4. Python——LOL官方商城皮肤信息爬取(一次练手)
  5. 使用lombok 注解Java类
  6. VMware Workstation 常见问题解决
  7. jqGrid整合篇
  8. 二分查找算法的java实现
  9. SpringMVC使用StandardServletMultipartResolver上传文件
  10. day09 详解内存管理机制