【Hadoop】Hadoop的优化

Hadoop优化

HDFS小文件的影响

大量的小文件会影响到NameNode的寿命,因为这些文件的元数据信息会存在NameNode的内存中,而NameNode的内存是有限的
会影响计算引擎的任务数量,每一个小的文件都会生成一个Map任务

【1】数据输入小文件处理

1.合并小文件:对小文件进行归档(Har)、自定义Inputformat将小文件存储成SequenceFile文件
2.采用ConbinFileInputFormat来作为输入,解决输入端大量小文件场景
3.对于大量小文件Job,可以开启JVM重用

【2】Map阶段

1.增大环形缓冲区的大小,比如从100M扩大到200M
2.增大环形缓冲区的溢写比例,由80%扩大到90%
3.减少对溢写文件的merge次数(10个文件,一次20个merge)
4.在不影响业务逻辑的前提下,采用Combiner预聚合,减少I/O

【3】Reduce阶段

1.合理设置Map和Reduce数:两个都不能设置太少,也不能设置太多。太少,会导致Task等待,延长处理时间;太多,会导致 Map、Reduce任务间竞争资源,造成处理超时等错误
2.设置Map、Reduce共存:调整slowstart.completedmaps参数,使Map运行到一定程度后,Reduce也开始运行,减少Reduce的等待时间
3.规避使用Reduce,因为Reduce在用于连接数据集的时候将会产生大量的网络消耗
4.增加每个Reduce去Map中获取数据的并行数
5.集群性能可以的前提下,增大Reduce端存储数据内存的大小

【4】IO传输

采用数据压缩的方式,减少网络IO的的时间。安装Snappy和LZOP压缩编码器。
使用SequenceFile二进制文件

【5】整体

MapTask默认内存大小为1G,可以增加MapTask内存大小为4-5g
ReduceTask默认内存大小为1G,可以增加ReduceTask内存大小为4-5g
可以增加MapTask的cpu核数,增加ReduceTask的CPU核数
增加每个Container的CPU核数和内存大小
调整每个Map Task和Reduce Task最大重试次数

发布了72 篇原创文章 · 获赞 306 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/qq_43733123/article/details/104915258