🍬 博主介绍
👨🎓 博主介绍:大家好,我是淼淼_喵 ,很高兴认识大家~
✨主攻领域:【大数据开发】【数据仓库】 【ETL】 【数据分析】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝欢迎评论
🙏作者水平有限,欢迎各位大佬指点,相互习进步!
Map Join
作用
大表 和 小表 关联查询时,提升性能,避免数据倾斜。
触发条件
-- 1、开启MapJoin
set hive.auto.convert.join=true;
-- 2、设置阈值,不要超出自己的硬件配置,否则内存溢出
set hive.auto.convert.join.noconditionaltask.size=512000000
Bucket-Map Join
作用
大表 和 中表 关联(小表的数据大小超出阈值)时,使用Map端Join优化。
触发条件
1) 开启配置:set hive.optimize.bucketmapjoin = true;
2) 一个表的bucket数是另一个表bucket数的==整数倍==
3) bucket列 == join列 4) 满足map join条件
SMB Join (sort merge bucket)
作用
当大表和大表关联(关联的两个表数据都很大)时使用。
触发条件
- 开启SMB配置
set hive.optimize.bucketmapjoin = true;set hive.auto.convert.sortmerge.join=true;set hive.optimize.bucketmapjoin.sortedmerge = true;set hive.auto.convert.sortmerge.join.noconditionaltask=true;
- bucket列 == join列,且要Sort此列1. 创建表时,sorted by (列);2. 插入数据时:1. cluster by (列);2. hive.enforce.sorting 设置为 true
- 两个表的bucket数==必须相等==
- 满足BucketMapJoin的条件
Join-Skew关联查询时数据倾斜
运行时优化
-- 开启运行时倾斜优化
set hive.optimize.skewjoin=true;
-- 设定倾斜阈值
set hive.skewjoin.key=100000; //行数
编译时优化
- 开启编译时优化
set hive.optimize.skewjoin.compiletime=true;
- 建表时指定倾斜字段和倾斜的值
CREATE TABLE list_bucket_single (key STRING, value STRING)-- 倾斜的字段和需要拆分的key值SKEWED BY (name) ON (‘张三’,’李四’,’王五’)-- 为倾斜值创建子目录单独存放[STORED AS DIRECTORIES];
Unoin优化
set hive.optimize.union.remove=true;
GroupBy-Skew统计时数据倾斜
Map先行打散
CM中配置hive.map.aggr
MR Job随机数打散
hive.groupby.skewindata=true;
注意:有多个列执行distinct去重操作时,不支持skewindata:
SELECT ip, count(DISTINCT uid), count(DISTINCT uname) FROMlog GROUP BY ip;
DISTINCT on different columns not supported with skew in data.
版权归原作者 淼淼_喵 所有, 如有侵权,请联系我们删除。