MapReduce中的数据倾斜


产生原因:

***在MapperReduce做计算的时候会产生数据的侵写,因为不合理的key,导致了数据的分布不均匀。
**

解决方案

**
选择合适的key作为统计依据,使得数据能够在分区中均匀分布。一般需要程序员对分析的数据有一定的预判。

1. 开启map端的压缩

可以减少reduce shuffle 过程中的网络带宽;弊端:在计算的过程中需要消耗额外的CPU进行数据的压缩和解压缩。

conf.setBoolean("mapreduce.map.output.compress", true);
conf.setClass("mapreduce.map.output.compress.codec",
Lz4Codec.class, CompressionCodec.class);

注意:此方案适合在集群环境下使用。如果是本地测试。会出现not a gzip file 的错误。
在这里插入图片描述

  1. **

2. combiner

**
MapReduce 计算,是在map端的优化。
假如我有一段文字我需要统计他的出现次数:
A A B B C C D A E E B F…

问题: **1)之前的map段的排序是直接对内容进行排序**:
					     A 	1
					     A 	1
					     B 	1
					     B 	1
					     C 	1
					     C 	1
					     .........
					     
 **Reduce端会把这些进行排序的文件下载再次进行reduce的归并、排序。**
			     A 	2
			     B 	2
			     C	 2
			     ......

注意:如果100亿条无序出现的数字需要进行排序。那么在我reduce端下载map端的数据会占用大量的带宽。

方案:2)在map端文件的排序进行优化。执行reduce端的方法进行排序。这样我传输的数据量就会有一个质的下降。

排序:
A 2
B 2
C 2

注意: combiner 结果类型必须一致;统计过程必须支持局部计算。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值