概述
效率问题
(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)减少溢写次数(增加内存)
<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)减少合并次数
<property>
<name>mapreduce.task.io.sort.factor</name>
<value>10</value>
</property>
(3)在Map之后,不影响业务逻辑情况下进行Combiner
Reduce阶段
(1)合理设置Map与Reduce个数
(2)设置Map/Reduce共存,设置运行一定程度的Map运行后,启动Reduce减少等待时间
<property>
<name>mapreduce.job.reduce.slowstart.completedmaps</name>
<value>0.05</value>
</property>
(3)合理设置Reduce端的Buffer
<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)设置核心数
<!--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)设置内存
<!--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的效率问题与优化效率问题效率优化所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复