数据倾斜以及相应的解决办法

本文深入解析数据倾斜现象,探讨其在MapReduce、Hive及Spark等大数据处理框架中的成因,包括key分布不均、业务数据特性等,并提供详尽的优化策略,如配置调整、SQL优化及自定义Shuffle等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据倾斜就是key分布不均匀,导致分发到不同的reduce上,个别是任务重,导致其他reduce完成,而这些个别的reduce迟迟完成不了

原因:
key分布不均匀:
     map端数据倾斜,输入文件太多且大小不一
     reduce端数据倾斜,分区器问题
     业务数据本身的特征
hive的解决方案:
     调节hive的配置参数
         设置hive.map.aggr=ture map端部分聚合,相当于Combiner
         设置hive.groupby.skewindata = true有数据倾斜时,查询计划生成两个mrjob,第一个job先进行key随机分配处理,先缩小数据量。第二个job在进行真正的group by key处理
     SQL语句优化
         大小表进行连接的时候,使用map join让小表先进内存,在map端进行reduce
         大表接大表的时候,如果是空值造成数据倾斜,那么把空值变成一个字符串加上随机数,把这部分倾斜的数据分发到不同的reduce上
         如果count distinct有大量相同特殊值(如空值)空值可以不做处理,直接最后count结果加1即可,或者空值单独拿出来处理,最后再union回去
         不同数据类型关联 默认的hash操作会按其中的一种类型的值行分配,导致别一种类型全部分发到同一个redduce中,把两个关联的类型转换成相同类型
     MR解决方案
spark的解决方法 
     shuffle
     hashshufflemanager  spark1.2之前
     sortshufflemanager  spark1.2之后

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值