首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >HiveQL配置文件优化策略

HiveQL配置文件优化策略

作者头像
用户4128047
发布2025-12-23 15:39:27
发布2025-12-23 15:39:27
580
举报

HiveQL从Map/Reduce的运行角度来考虑优化性能,从更底层思考如何优化运算性能. 2.1列裁剪 HiveQL只读所需要的列,而忽略其它列。节省了读开销,中间表存储开销和数据整合开销。 裁剪所对应的参数项为:hive.optimize.cp=true(默认值为真) 2.2分区裁剪 查询中减少不必要的分区。如: SELECT * FROM (SELECTT a,COUNT(1) FROM b GROUP BY a) c WHERE c.dt=’2020-04-09’; #(多余分区) SELECT * FROM a JOIN (SELECT * FROM b) c ON (a.a1=b.a2) WHERE c.dt=’2020-04-09’; 若将“c.dt=’2020-04-09”分区条件放入子查询中更为高效,减少了读入分区数目。 Hive 自动执行这种裁剪优化。 分区参数为:hive.optimize.pruner=true(默认值为真) 2.3 JOIN操作 在有join操作的查询语句中,应将条目少的表/子查询放在 Join 操作符的左边。 因为在 Reduce 阶段,位于 Join 操作符左边的表的内容会被加载进内存,载入条目较少的表可以有效减少 OOM(out of memory)即内存溢出。 2.4map join操作 Join 操作在 Map 阶段完成,不再需要Reduce。 相关的参数为: hive.join.emit.interval = 1000 hive.mapjoin.size.key = 10000 hive.mapjoin.cache.numrows = 10000 2.5GROUP BY操作 (1)Map端部分聚合:聚合操作都可以先在Map端进行部分聚合,然后reduce端得出最终结果. hive.map.aggr=true用于设定是否在 map 端进行聚合,默认值为真 hive.groupby.mapaggr.checkinterval=100000用于设定 map 端进行聚合操作的条目数 (2)有数据倾斜时进行负载均衡: 设定 hive.groupby.skewindata= true ,生成两 个 MapReduce 任务查询计划。第一个 map 的输出结果集合会随机分布到 reduce 中, 每个 reduce 做部分聚合操作,并输出结果。这样相同的 Group By Key 有可 能分发到不同的 reduce 中,从而达到负载均衡的目的;第二个根据预处理的数据结果将相同的 Group By Key 分布到同一个 reduce 中,最后完成最终的聚合操作。 2.6合并小文件 小文件容易在文件存储端造成瓶颈,给 HDFS 带来压力,影响处理效率。可以通过合并Map和Reduce的结果文件来消除影响。 设置合并小文件属性的参数有: 合并Map输出文件:hive.merge.mapfiles=true(默认值为真) 合并Reduce 端输出文件:hive.merge.mapredfiles=false(默认值为假) 合并文件的大小:hive.merge.size.per.task=25610001000(默认值为 256000000)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-12-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档