hive中数据倾斜
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,数据倾斜通常指hive根据key值hash分发到各个节点,相同的key值会分发到一个执行节点中,由于某些key值对应的数据量比其它key值的数据量大很多,导致某些执行节点的运行时间远大于其它节点,从而
千家信息网最后更新 2025年12月02日hive中数据倾斜
数据倾斜通常指hive根据key值hash分发到各个节点,相同的key值会分发到一个执行节点中,由于某些key值对应的数据量比其它key值的数据量大很多,导致某些执行节点的运行时间远大于其它节点,从而导致整个job执行时间较长。
在hive中执行的sql会有map和reduce两个阶段,map阶段的数据倾斜主要为数据从磁盘读入内存时、join,reduce阶段数据倾斜主要有join、group by、count distinct,针对于这些操作有不同的处理方式来避免数据倾斜。
一、map阶段
1.由于map读入数据的文件大小分布不均匀,并且小文件特别多,导致某些map读取并处理的数据特别多
这种情况可通过参数调整防止由于小文件过多导致每个map读取的数据量不均匀,mapred.max.split.size=256000000(每个map可以处理的最大文件大小,可调大该值来减少map数)
二、reduce阶段
1.join
数据表在进行join时有两种情况会出现倾斜:
(1)小表和大表join的倾斜
这种情况,可以直接使用hint(如/ + mapjoin(a) /)将小表全部加载到内存中后顺序扫描大表完成join(mapjoin有使用限制,必须是join中的从表较小时才可用,从表主要指left join中的右表,right join中的左表,小表最大为2GB)
(2)大表和大表join的倾斜
这种情况,需要具体原因具体分析:
- 由某些特殊值引起的数据倾斜
参数设置方式:hive.optimize.skewjoin=true; 将造成倾斜的特殊值先不处理直接写入hdfs,然后新启一个mapjoin专门处理特殊值;可以通过参数设置数据量超过多少默认为特殊值,如hive.skewjoin.key=10000,表名超过10000条的key会被认定为特殊值;
特殊值的处理也可以在sql中进行优化,在sql中将特殊值与非特殊值分别处理,然后再通过union all拼接,但这样会增加IO; - 由空值引起的数据倾斜
将空值的key变为一个字符串加上随机数,也可以借鉴特殊值的sql优化方式; - 不同数据类型关联产生的数据倾斜
如int型的用户id与string类型的用户id进行关联,hive默认会将hash按int类型分配,string类型的数据会全部分配到一个reduce中,此时应将int型转化为string再做关联
2.group by + count distinct
当sql中出现这种情况时,需预先对group by的字段进行去重处理,然后再进行count
数据
特殊
处理
情况
阶段
类型
节点
参数
文件
方式
关联
不同
最大
内存
大小
时间
用户
分配
相同
两个
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
广州课堂直播软件开发
江西服务器电源订购
为什么选者软件开发这个专业
双线服务器是什么游戏
开封bim软件开发工程拿证快
盐城思科网络安全插画
河北银行服务器维保
如何把网络安全的威胁解除
数据库安全性控实验答案
sql备份数据库影响使用吗
kali如何找到学校的服务器
软件开发互联网推广
闪讯网络技术有限公司
cis网络安全创新大会日程
.cs文件用什么软件开发
自动生成数据库表关系工具
lp服务器
软件开发新手怎么求职
杀毒软件把用友的数据库删了
铁路网络安全法解读
数据库是硬件和架构吗
ntp服务器版本号
网络安全公益宣传你的信息你做主
数据库新技术考试题
干性指数数据库
全球网络安全行业组织
计算机网络技术设计方案
网络安全统一问题库影响及危害
有网络安全的图片
重庆服务器dns 虚拟主机