解决Hive数据倾斜问题

Hive产生数据倾斜的原因有两个,

一个是group by分组聚合时某一个key或者空值对应的value数据量过大导致,只需要开启一个map-side(预聚合)参数即可解决

另一种就是join时产生的数据倾斜,join又分为两种场景

场景一:大表join小表

比如在数仓中,事实表join维度表(订单表join地区表),这种场景下产生的数据倾斜只需要开启mapjoin即可

                set hive.auto.convert.join=true;
                set hive.mapjoin.smalltable.filesize=250000;

场景二:大表join大表

解决方法①:启用smb join,意思是分桶有序的join,要求桶和桶之间必须是相同或者倍数的关系

解决方法②:启用skew join,对于数据量大的key加随机数,二次聚合

解决方法③:左表随机,右表扩容,左表数据量大的key加随机数,发往不同的Reducer进行处理

以上三种解决方法并不能很好的去解决大表join大表的问题,只能平时应急使用,如果想从根本上解决问题的话,还是需要在数仓建模的过程中去解决

解决方法④:数仓建模

                对于需要两张大的事实表join才能得到的表,在建模时直接考虑使用累积性快照事实表,原本很大的两张表,每天把增量数据做一个join,相对来说效率要高很多

以上就是解决Hive数仓里数据倾斜问题的方法啦

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值