码迷,mamicode.com
首页 > 其他好文 > 详细

Hadoop优化

时间:2020-03-14 11:21:18      阅读:53      评论:0      收藏:0      [点我收藏+]

标签:范围   text   net   分块   延长   记录   输入   tor   maps   

MapReduce程序瓶颈

计算机性能

CPU、内存、磁盘、网络

I/O操作优化
  • 数据倾斜
  • Map和Reduce数设置不合理
  • Map运行时间太长,导致Reduce等待过久
  • 小文件过多
  • 大量的不可分块的超大文件
  • spill次数过多
  • merge次数过多

MapReduce优化方法

主要从六个方面考虑:数据输入、Map阶段、Reduce阶段、IO传输、数据倾斜问题和常用的调优参数

数据输入
  1. 合并小文件:在执行任务前,将小文件合并,大量的小文件会产生大量的Map任务
  2. 采用CombineTextInputFormat作为输入,解决输入端大量小文件场景
Map阶段
  1. 减少溢写spill次数:通过调整io.sort.mb以及sort.spill.percent参数值,增大出发spill的内存上限,减少spill次数,减少IO开销
  2. 减少合并merge次数:通过调整io.sort.factor参数,增大merge的文件数目,减少merge次数,缩短Map处理时间
  3. 不影响业务逻辑情况下,采用combiner,减少网络开销
Reduce阶段
  1. 合理设置Map和Reduce数:两个不能设置太少或太多。太少,会导致Task等待,延长处理时间;太多,会导致Map、Reduce任务竞争资源,造成处理超时
  2. 设置Map、Reduce共存:调整slowstart.completemaps参数,使map运行到一定程度后,Reduce也能运行,减少Reduce的等待时间
  3. 规避使用Reduce:Reduce使用数据集时,会产生大量网络开销
IO传输
  1. 采取数据压缩,减少IO传输时间
  2. 使用SequenceFile二进制文件
数据倾斜

数据频率倾斜现象:某一个区域的数据量远远大于其他区域

数据大小倾斜现象:部分记录的大小远远大于平均值

  1. 抽样和范围分区:通过对原始数据抽样得到的结果来预设分区边界值
  2. 自定义分区:编程解决分区造成的数据倾斜
  3. Combine可以大量减小数据倾斜
  4. 尽量使用map join,避免使用reduce join

HDFS小文件优化方法

HDFS上每个文件都要在NameNode建立一个索引,如果小文件过多,就会产生很多索引文件,一方面大量占用NameNode的内存空间,另一个方面造成索引速度变慢

解决方法
  1. 在数据采集时,将小文件合并为大文件,再上传给HDFS
  2. 业务处理之前,使用MapReduce把小文件合并起来
  3. 使用CombineTextInputFormat提高效率

Hadoop优化

标签:范围   text   net   分块   延长   记录   输入   tor   maps   

原文地址:https://www.cnblogs.com/chenshaowei/p/12490722.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!