企业优化

 1. MapReduce 跑的慢的原因

(1)计算机性能:CPU,内存,磁盘健康,网络

(2)I/O操作

数据倾斜

map和reduce设置不合理

map运行时间太长,导致reduce等待过久

小文件太多:大量的小文件会产生大量的Map任务,增大Map任务装在次数,而任务的装载比较耗时,导致MP较慢

大量的不可分割的超大块文件

spill次数过多

merge次数过多

2.优化方法

数据输入,Map阶段,reduce阶段,io传输,数据倾斜,常用的调优参数

(1)数据输入

合并小文件:在执行MR任务前,将小文件进行合并

采用CombineTextInputFormat来作为输入

(2)Map阶段

减少溢写次数(Spill):调整io. Sort. mb及 sort.spill.percent参数值,数据尽可能少的从环形缓存溢写,减少磁盘IO

减少合并次数(Merge):通过调整io. Sort.factor参数,增大Merge的文件数目,减少Merge的次数

Combine:map之后,在不影响业务逻辑的前提下,先进行Combine处理,减少IO

(3)reduce阶段

合理设置map和reduce数目:数目太少,会导致task等待太久;数目太多,会导致map和reduce任务间竞争资源,造成处理超时等错误

设置map和reduce共存:调整 slowstart. completedmaps参数,使得map运行到一定程度后,reduce也开始运行,减少reduce的等待时间

规避使用reduce:reduce在用于连接数据集时会产生大量的网络消耗

合理设置reduce端的buffer:mapreduce.reduce.input.buffer.percent,默认为0.0。当值大于0的时候,会保留指定比例的内存读Buffer中的数据直接拿给Reduce使用。

(4)IO传输

采用数据压缩的方式,减少网络IO的时间(Snappy和LZO)

使用Sequencefile二进制文件

(5)数据倾斜

抽样和范围分区:对原始数据进行抽样得到的结果集来预定分区边界值

Combine

Mapjoin

自定义分区

散列值(增加随机数)

改变key的粒度

(6)常用的调优参数

6.1 资源相关参数

 

 

 

 

 

用户自己的MR应用程序中配置就可以生效(mapred-default.xml)

 

 

 6.2 Shuffle性能优化的关键参数,应在YARN启动之前就配置好(mapred-default.xml)

 

 

 6.3 容错相关参数(MapReduce性能优化)

 

 

 (7)小文件

HDFS上每个文件都要在NameNode上建立一个索引,这个索引的大小约为150byte,这样当小文件比较多的时候,就会产生很多的索引文件。

一方面会大量占用NameNode的内存空间,另一方面就是索引文件过大使得索引速度变慢。

7.1 在数据采集的时候,将小文件或者小批数据合成大文件再长传到HDFS

7.2 在业务处理之前,在HDFS上使用MapReduce程序对小文件进行合并

7.3 在mapreduce处理时,可采用CombineTextInputFormat提高效率

Hdoop Archive:将小文件放入HDFS块中的文件存档工具,它能将多个小文件打包成一个HAR文件,减少NameNode的内存使用

Sequence File:Sequence File由一系列的二进制key/value组成,如果key为文件内容,则可以将大批小文件合并成一个大文件

CombineFileInputFormat

开启JVM重用:对于大量小文件,可以开启JVM重用会减少45%运行时间

 

posted on 2020-11-25 15:28  happygril3  阅读(173)  评论(0)    收藏  举报

导航