Hive---数据倾斜的产生及解决方法

本文介绍了Hive数据倾斜的定义,包括空值引发的倾斜、大表join小表使用MapJoin、group by造成的倾斜及其解决方案,如空值过滤、MapJoin优化、两段聚合策略,并提醒关注分区数量对数据分布的影响。
摘要由CSDN通过智能技术生成

一、数据倾斜的定义

数据倾斜是指在并行进行数据处理的时候,由于单个partition的数据显著多余其他部分,分布不均匀,导致大量数据集中分布到一台或者某几台计算节点上,使得该部分的处理速度远低于平均计算速度,成为整个数据集处理的瓶颈,从而影响整体计算性能。

二、几种数据倾斜的解决方案

1、空值引发的数据倾斜

在数据采集时,判断导致数据倾斜的key是不是提前过滤掉了。在inner join,也就是使用内连接时,hive默认过滤掉了空值,但对于left join等等,会保留左边有的值。空KEY过滤的使用场景:1.非inner join;2.不需要字段为Null的。

两种过滤方式:

(1) insert overwrite table jointable select n.* from (select * from nullidtable where id is not null) n left join bigtable o on n.id = o.id;//先过滤掉空值,再进行join

(2)有时虽然某个 key 为空对应的数据很多,但是相应的数据不是异常数据,必须要包含在 join 的结果中,此时我们可以表 a 中 key 为空的字段赋一个随机的值,使得数据随机均匀地分不到不同的 reducer 上。

insert overwrite table jointable select n.* from nullidtable n full join bigtable o on nvl(n.id,rand()) = o.id; //nvl(a, b):如果a为Null,则取b的值作

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值