hive中数据倾斜
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,数据倾斜通常指hive根据key值hash分发到各个节点,相同的key值会分发到一个执行节点中,由于某些key值对应的数据量比其它key值的数据量大很多,导致某些执行节点的运行时间远大于其它节点,从而
千家信息网最后更新 2025年01月23日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安全错误
数据库的锁怎样保障安全
专门的蛋白质数据库
premed数据库
杭州东信网络技术限公司
软件开发过程中复杂性控制
网络安全信息简称
软件开发系统开发培训
无线网络安全防护系统
计算机网络技术第2版答案
天津服务器电源出售
battlebit连接不上服务器
广州交友软件开发如何收费
数据库应用技术国开大学2021
新服务器oracle数据库迁移
sqlite内存数据库效率
国家网络安全参与企业
全国网络安全技术与应用
ue4 客户端与服务器
数据库改域名怎么办
华北2区阿里云服务器
灵瞳宝可梦服务器在哪玩
烟台卓通网络技术有限公司
软件开发求职怎么发邮件
重庆市软件开发人员薪酬
数据库符号是什么意思
网络安全管理工程师工资
凤凰之神服务器怎么用
vba复制粘贴数据到数据库
毕设需要购买服务器吗
服务器网络接口
二维码 服务器 管理