Hadoop优化
Posted Tanglement
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop优化相关的知识,希望对你有一定的参考价值。
MapReduce程序瓶颈
计算机性能
CPU、内存、磁盘、网络
I/O操作优化
- 数据倾斜
- Map和Reduce数设置不合理
- Map运行时间太长,导致Reduce等待过久
- 小文件过多
- 大量的不可分块的超大文件
- spill次数过多
- merge次数过多
MapReduce优化方法
主要从六个方面考虑:数据输入、Map阶段、Reduce阶段、IO传输、数据倾斜问题和常用的调优参数
数据输入
- 合并小文件:在执行任务前,将小文件合并,大量的小文件会产生大量的Map任务
- 采用CombineTextInputFormat作为输入,解决输入端大量小文件场景
Map阶段
- 减少溢写spill次数:通过调整io.sort.mb以及sort.spill.percent参数值,增大出发spill的内存上限,减少spill次数,减少IO开销
- 减少合并merge次数:通过调整io.sort.factor参数,增大merge的文件数目,减少merge次数,缩短Map处理时间
- 不影响业务逻辑情况下,采用combiner,减少网络开销
Reduce阶段
- 合理设置Map和Reduce数:两个不能设置太少或太多。太少,会导致Task等待,延长处理时间;太多,会导致Map、Reduce任务竞争资源,造成处理超时
- 设置Map、Reduce共存:调整slowstart.completemaps参数,使map运行到一定程度后,Reduce也能运行,减少Reduce的等待时间
- 规避使用Reduce:Reduce使用数据集时,会产生大量网络开销
IO传输
- 采取数据压缩,减少IO传输时间
- 使用SequenceFile二进制文件
数据倾斜
数据频率倾斜现象:某一个区域的数据量远远大于其他区域
数据大小倾斜现象:部分记录的大小远远大于平均值
- 抽样和范围分区:通过对原始数据抽样得到的结果来预设分区边界值
- 自定义分区:编程解决分区造成的数据倾斜
- Combine可以大量减小数据倾斜
- 尽量使用map join,避免使用reduce join
HDFS小文件优化方法
HDFS上每个文件都要在NameNode建立一个索引,如果小文件过多,就会产生很多索引文件,一方面大量占用NameNode的内存空间,另一个方面造成索引速度变慢
解决方法
- 在数据采集时,将小文件合并为大文件,再上传给HDFS
- 业务处理之前,使用MapReduce把小文件合并起来
- 使用CombineTextInputFormat提高效率
以上是关于Hadoop优化的主要内容,如果未能解决你的问题,请参考以下文章