1.1. 调优目标
Hive调优的目标是在不影响其他业务正常运行的前提下,最大限度利用集群的物理资源,如CPU、内存、磁盘IO,使其某一项达到瓶颈。如下CPU接近瓶颈:
图片.png1.2. 调优原则
(1)保证map扫描的数据量尽量少
减少map端扫描数量,需要控制待处理的表文件或中间文件的数据量尽量少。
优化的方式如:Hive表文件使用高效的文件格式、Hive表文件使用合适的文件压缩格式、中间文件使用合适的文件压缩格式、利用列裁剪、利用分区裁剪、使用分桶。
(2)保证map传送给reduce的数据量尽量小
控制map传送给reduce的数据量,是指JOIN避免笛卡尔积、启动谓词下推、开启map端聚合功能。
(3)保证map和reduce处理的数据量尽量均衡
保证map处理的数据量尽量均衡,是指使用Hive合并输入格式、必要时对小文件进行合并。
保证reduce处理的数据量尽量均衡,是指解决数据倾斜问题。包括解决group by造成的数据倾斜、解决join造成的数据倾斜。
(4)合理调整map和reduce占用的计算资源
合理调整map和reduce占用的计算资源,是指**通过参数设置合理调整map和reduce的内存及虚拟核数**。
根据集群总体资源情况,以及分配给当前租户的资源情况,在不影响其他业务正常运行的条件下,最大限度地利用可使用的计算资源。
(5)合理调整map和reduce的数量
合理调整map数,是指通过设置每个map处理数据量的最大和最小值来合理控制map的数量。
合理调整reduce数,是指通过直接设置reduce数量或通过设置每个reduce的处理数据量来合理控制reduce的数量。
(6)重用计算结果
重用计算结果,是指**将重复的子查询结果保存到中间表**,供其他查询使用,减少重复计算,节省计算资源。
(7)使用稳定成熟的Hive优化特性
使用稳定成熟的Hive优化特性,包括:**相关性优化器(****Correlation Optimizer****),基于代价的优化(****Cost-based optimization****),向量化查询引擎(****Vectorized Query Execution****),****Join****相关优化(Map Join、SMB Join),Multiple Insert特性**,**TABLESAMPLE****抽样查询**、**Limit优化**、**局部排序(SORT BY、****DISTRIBUTE BY****)。**
(8)使用高效HQL或改用MR
使用高效HQL,包括**慎用低性能的UDF和SerDe**、**优化count(distinct)**。
对于使用HQL比较冗余同时性能低下的场景,在充分理解业务需求后,改用MR效率更高。
精选.png
网友评论