暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
Hive-查询优化总结.doc
45
5页
0次
2025-04-25
免费下载
一、join 优化
Join 查找操作的基本原则:应该将条目少的表/子查询放在 Join 操作符的左边。原因
是在 Join 操作的 Reduce 阶段,位于 Join 操作符左边的表的内容会被加载进内存,将
条目少的表放在左边,可以有效减少发生内存溢出错误的几率。
Join 查找操作中如果存在多个 join,且所有参与 join 的表中其参与 join key 都相
同,则会将所有的 join 合并到一个 mapred 程序中。
案例:
SELECT a.val, b.val, c.val FROM a JOIN b ON (a.key = b.key1) JOIN c ON
(c.key = b.key1) 在一个 mapre 程序中执行 join
SELECT a.val, b.val, c.val FROM a JOIN b ON (a.key = b.key1) JOIN c ON
(c.key = b.key2) 在两个 mapred 程序中执行 join
Map join 的关键在于 join 操作中的某个表的数据量很小,案例:
SELECT /*+ MAPJOIN(b) */ a.key, a.value
FROM a join b on a.key = b.key
Mapjoin 的限制是无法执行 a FULL/RIGHT OUTER JOIN b,和 map join 相关的
hive 参数:hive.join.emit.interval hive.mapjoin.size.key
hive.mapjoin.cache.numrows
由于 join 操作是在 where 操作之前执行,所以当你在执行 join 时,where 条件并不
能起到减少 join 数据的作用;案例:
SELECT a.val, b.val FROM a LEFT OUTER JOIN b ON (a.key=b.key)
WHERE a.ds='2009-07-07' AND b.ds='2009-07-07'
最好修改为:
SELECT a.val, b.val FROM a LEFT OUTER JOIN b
ON (a.key=b.key AND b.ds='2009-07-07' AND a.ds='2009-07-07')
join 操作的每一个 mapred 程序中,hive 都会把出现在 join 语句中相对靠后的表
的数据 stream 化,相对靠前的变的数据缓存在内存中。当然,也可以手动指定 stream
化的表:SELECT /*+ STREAMTABLE(a) */ a.val, b.val, c.val FROM a JOIN b ON
(a.key = b.key1) JOIN c ON (c.key = b.key1)
二、group by 优化
Map 端聚合,首先在 map 端进行初步聚合,最后在 reduce 端得出最终结果,相关
参数:
· hive.map.aggr = true 是否在 Map 端进行聚合,默认为 True
· hive.groupby.mapaggr.checkinterval = 100000 Map 端进行聚合操
作的条目数目
数据倾斜聚合优化,设置参数 hive.groupby.skewindata = true当选项设
定为 true,生成的查询计划会有两个 MR Job。第一个 MR Job 中,Map 的输出结果集
合会随机分布到 Reduce 中,每个 Reduce 做部分聚合操作,并输出结果,这样处理的
结果是相同的 Group By Key 有可能被分发到不同的 Reduce 中,从而达到负载均衡的
目的;第二个 MR Job 再根据预处理的数据结果按照 Group By Key 分布到 Reduce
(这个过程可以保证相同的 Group By Key 被分布到同一个 Reduce 中),最后完成最
终的聚合操作。
of 5
免费下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜