程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

5.HIVE定位调优指导

balukai 2025-03-07 15:57:02 文章精选 5 ℃

1.1. 日志搜集

1.1.1. HiveServer日志获取

Hive调优需要看HiveServer的运行日志及GC日志。

HiveServer日志路径为:HiveServer节点的
/var/log/Bigdata/hive/hiveserver/

文件名

日志内容

hive.log

HiveServer运行日志

hive-omm-gc.log.0.current

HiveServer GC日志

通过Manager界面也可以下载,如下:



1.1.2. MapReduce日志查看

Hive提交的MapReduce的日志中详细地记录了map和reduce任务的运行情况。

通过Yarn原生界面可以查看,如下:




1.2. 定位调优思路

第一步,分析SQL待处理的表及文件。

统计待处理的表的文件数、数据量、条数、文件格式、压缩格式,分析是否有更适合的文件存储格式、压缩格式,是否能够使用上分区或分桶,是否有大量小文件需要map前合并。如果有优化空间,则执行优化。

第二步,分析SQL的结构

是否有重复的子查询可以存到中间表,是否可以使用相关性优化器,是否出现笛卡尔积需要去除,是否可以使用Multiple Insert语句,是否使用了低性能的UDF或SerDe需要替换。如果有优化空间,则执行优化。

第三步,分析SQL的操作

是否可利用MapJoin,是否可使用SMB Join,是否需要设置map端聚合,是否需要优化count(distinct),是否全局排序可以使用局部排序代替,是否可以使用向量化优化、基于代价的优化等优化器。如果有优化空间,则执行优化。

第四步,观察SQL启动的MR运行情况

如果map运行缓慢,考虑减小Map处理的最大数据量提高并发度,考虑增大map的内存和虚拟核数;如果是reduce运行缓慢,是否有group by倾斜需要解决,是否有join倾斜需要处理,当大量重复数据做去重时减少Reduce数量,当大量匹配记录做关联时增加Reduce数量。


1.3. 常见问题处理

1.3.1. OOM(内存溢出)

1.3.1.1. 问题描述

HiveServer运行日志及MR日志报以下错误:

Container [pid=48338,containerID=container_1417574466181_3484_01_000043] is running beyond physical memory limits. Current usage: 1.0 GB of 1 GB physical memory used; 2.0 GB of 2.1 GB virtual memory used. Killing container. Dump of the process-tree for container_1417574466181_3484_01_000043 : |- PID PPID PGRPID SESSID CMD_NAME USER_MODE_TIME(MILLIS) SYSTEM_TIME(MILLIS) VMEM_USAGE(BYTES) RSSMEM_USAGE(PAGES) FULL_CMD_LINE |- 48345 48338 48338 48338 (java) 2432 61 2062110720 272981


1.3.1.2. 解决方案

从日志可以看出,Container物理内存不够用了,观察YARN界面该container是map还是reduce。

如果是map,则增大mapreduce.map.memory.mb的设置,如设置成6144(默认值为4096),但不能超过
yarn.scheduler.maximum-allocation-mb的值。

如果是reduce,则增大
mapreduce.reduce.memory.mb的设置,如设置成6144(默认值为4096),但不能超过
yarn.scheduler.maximum-allocation-mb的值。

最近发表
标签列表