Hive数据倾斜解决思路

本文总结了Hive数据倾斜的原因、探查方法及多种解决方案,包括mapjoin、手动分割、添加随机前缀、使用Skewed Table或List Bucketing Table以及调整reduce节点处理的数据量。通过对倾斜key的处理,避免shuffle阶段数据集中,从而提高大数据处理效率。
摘要由CSDN通过智能技术生成

Hive数据倾斜总结

发生倾斜的根本原因在于,shuffle之后,key的分布不均匀,使得大量的key集中在某个reduce节点,导致此节点过于“忙碌”,在其他节点都处理完之后,任务的结整需要等待此节点处理完,使得整个任务被此节点堵塞,要解决此问题,主要可以分为两大块:一是尽量不shuffle;二是shuffle之后,在reduce节点上的key分布尽量均匀。

倾斜探查

join key倾斜

select key, count(*) cnt 
from B b 
group by key
order by cnt desc;

如果某个key的cnt比较大,比如排在第1的key,cnt占了一大半,那使用这个key去join,极有可能发生数据倾斜。
探查结果
像图中,排在第1的key,占据了4161w条记录,占表总记录数的一半,如果使用这个key去join,运行时肯定倾斜。

查看日志

如果发现,某个任务运行时间比较长,可以看下执行日志,如果运行时reduce阶段一直在99%,则极可能是发生了数据倾斜,如下图:
在这里插入图片描述

倾斜原因

  • key相同的太集中,导致倾斜

  • key的哈希结果,或分区函数的结果,导致key分布集中

解决方案

只要有shuffle,就有可能产生数据倾斜,解决数据倾斜的总体思路是:

  • 能在map端处理的,不留到reduce端(当然,这不仅是解决数据倾斜的思路,这个适用所有的优化):
    • 根据谓词下推规则,尽早过滤数据;
    • 使用map Join
  • 将key值尽量分散。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值