大数据-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)减少溢写次数(增加内存)

<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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值