HIVESQL数据倾斜干货

reducejoin数据倾斜就是大量数据经过hash后汇集到一个reduce数据倾斜的几种常见场景:

1.distinct
2.group by
3.reducejoin
4.动态分区

1可以转换到2,2可以加参数就可以解决,原理在于预处理
参数:set hive.groupby.skewindata=true; --如果是group by过程出现倾斜 应该设置为true,这种方法会启动两个job,第一个job会在key前面添加一个随机数,将数据散列到reduce中,第二个job就是将key前面的随机数去掉进行聚合。

对于常见的情况3,是发生在关联处(比如on a.id=b.id),处理措施如下:

(首先考虑下数据取数范围、过滤条件,尽早过滤数据)

先查看a.id的数据量分布情况,

select id,count(1) as num from a group by id order by num desc

A:若是发现有大量null情况,就赋随机值处理

on (nvl(a.id,concat('HIVE_',rand())=b.id)
这样随机值就会打散reduce分布的数量,效果明显,原本要1小时的可以在1min内跑完	

B:若是a.id的值有业务含义,此时就不能草率赋随机值,此时应该查看维表b的数据量情况,若是一张小表,

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值