企业优化
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) 收藏 举报