我是靠谱客的博主 无情手套,这篇文章主要介绍大数据-MapReduce的效率问题与优化效率问题效率优化,现在分享给大家,希望可以做个参考。

效率问题

(1)数据倾斜

(2)Map和Reduce数量设置不合理

(3)Map运行时间太长,导致Reduce等待过久

(4)小文件过多(CombineTextInputFormat小文件合并)

(5)不可分块的超大文件(不断的溢写)

(6)多个溢写小文件需要多次Merge

效率优化

从六个方面思考:(1)数据输入;(2)Map阶段;(3)Reduce阶段;(4)IO传输;(5)数据倾斜;(6)参数调优

数据输入

(1)合并小文件:在执行MapReduce任务前就进行小文件合并

(2)采用CombineTextInputFormat来作为输入,解决输入端大量小文件的场景(MapReduce不适合处理大量小文件)

Map阶段

(1)减少溢写次数(增加内存)

复制代码
1
2
3
4
5
6
7
8
9
<property> <name>mapreduce.task.io.sort.mb</name> <value>100</value> </property> <property> <name>mapreduce.map.sort.spill.percent</name> <value>0.80</value> </property>

(2)减少合并次数

复制代码
1
2
3
4
5
<property> <name>mapreduce.task.io.sort.factor</name> <value>10</value> </property>

(3)在Map之后,不影响业务逻辑情况下进行Combiner

Reduce阶段

(1)合理设置Map与Reduce个数

(2)设置Map/Reduce共存,设置运行一定程度的Map运行后,启动Reduce减少等待时间

复制代码
1
2
3
4
5
<property> <name>mapreduce.job.reduce.slowstart.completedmaps</name> <value>0.05</value> </property>

(3)合理设置Reduce端的Buffer

复制代码
1
2
3
4
5
6
<property> <name>mapreduce.reduce.markreset.buffer.percent</name> <value>0.0</value> </property>

IO传输

(1)进行数据压缩

(2)使用sequenceFile

数据倾斜

(1)进行范围分区

(2)自定义分区

(3)Combine

(4)能用MapJoin坚决不用ReduceJoin

参数调优

(1)设置核心数

复制代码
1
2
3
4
5
6
7
8
9
10
11
<!--Map核心数设置--> <property> <name>mapreduce.map.cpu.vcores</name> <value>1</value> </property> <!--Reduce核心数设置--> <property> <name>mapreduce.reduce.cpu.vcores</name> <value>1</value> </property>

(2)设置内存

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!--MapTask内存设置--> <property> <name>mapreduce.map.memory.mb</name> <value>1024</value> </property> <!--ReduceTask内存设置--> <property> <name>mapreduce.reduce.memory.mb</name> <value>1024</value> </property> <!--Reduce去Map端拿数据并行度--> <property> <name>mapreduce.reduce.shuffle.parallelcopies</name> <value>5</value> </property>

最后

以上就是无情手套最近收集整理的关于大数据-MapReduce的效率问题与优化效率问题效率优化的全部内容,更多相关大数据-MapReduce内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(71)

评论列表共有 0 条评论

立即
投稿
返回
顶部