Hadoop技术篇hive的优化,经典面试
Posted 淼淼_喵
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop技术篇hive的优化,经典面试相关的知识,希望对你有一定的参考价值。
🍬 博主介绍
👨🎓 博主介绍:大家好,我是淼淼_喵 ,很高兴认识大家~
✨主攻领域:【大数据开发】【数据仓库】 【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此列
-
创建表时,sorted by (列);
-
插入数据时:
-
cluster by (列);
-
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.
以上是关于Hadoop技术篇hive的优化,经典面试的主要内容,如果未能解决你的问题,请参考以下文章