HiveServer2 频繁宕机根本原因分析

本文深入分析了HiveServer2在凌晨因内存泄漏导致的宕机问题,通过jstat与heapdump发现内存占用持续增长直至OOM,确认为HiveServer本身内存管理问题。探讨了不解决或版本升级的应对策略。


概要

问题描述: hiveServer2跑一段时间后, 一般在凌晨就会宕机(凌晨有很多定时任务),宕机比较有规律,就是跑几天就宕一次,分析一下原因。作业没有特别大的任务。
分析方法:jstat, dump
分析结论:hive2的hiveServer本身内存泄漏造成
解决方法:不解决或升级。


一、进行heap dump

1.1 查HiveServer2的进程id,得到219045

root@tbds-10-232-2-37:/data/var> ps -ef|grep HiveServer2
hive     219045      1 92 Feb17 ?        3-13:55:08 /usr/jdk64/jdk1.8.0_111/bin/java -Xmx16384m -Dhdp.version=2.2.0.0-2041 -Djava.net.preferIPv4Stack=true -Dhdp.version=2.2.0.0-2041 -Dhadoop.log.dir=/data/var/log/hadoop/hive -Dhadoop.log.file=hadoop.log -Dhadoop.home.dir=/data/bigdata/tbds/usr/hdp/2.2.0.0-2041/hadoop -Dhadoop.id.str=hive -Dhadoop.root.logger=INFO,console -Djava.library.path=:/usr/hdp/current/hadoop-client/lib/native/Linux-amd64-64:/data/bigdata/tbds/usr/hdp/2.2.0.0-2041/hadoop/lib/native -Dhadoop.policy.file=hadoop-policy.xml -Djava.net.preferIPv4Stack=true -Xmx16384m -Djava.security.auth.login.config=/etc/hive/conf.server/kafka_client_for_ranger_jaas.conf -XX:+UseG1GC -XX:InitiatingHeapOccupancyPercent=70 -XX:+PrintGCDateStamps -XX:GCLogFileSize=512M -verbose:gc -XX:+PrintGCDetails -Xloggc:/data/var/log/hive/hive_gc.log -Dlog4j.configurationFile=/etc/hive/conf/hive-log4j2.xml -Dhadoop.security.logger=INFO,NullAppender org.apache.hadoop.util.RunJar /usr/hdp/2.2.0.0-2041/hive/lib/hive-service-2.2.0.jar org.apache.hive.service.server.HiveServer2 --hiveconf hive.aux.jars.path=file:///usr/hdp/current/hive-webhcat/share/hcatalog/hive-hcatalog-core-2.2.0.jar,file:///usr/hdp/current/hive-webhcat/share/hcatalog/hive-hcatalog-core.jar,file:///usr/hdp/current/hive-webhcat/share/hcatalog/hive-hcatalog-pig-adapter-2.2.0.jar,file:///usr/hdp/current/hive-webhcat/share/hcatalog/hive-hcatalog-pig-adapter.jar,file:///usr/hdp/current/hive-webhcat/share/hcatalog/hive-hcatalog-server-extensions-2.2.0.jar,file:///usr/hdp/current/hive-webhcat/share/hcatalog/hive-hcatalog-server-extensions.jar,file:///usr/hdp/current/hive-webhcat/share/hcatalog/hive-hcatalog-streaming-2.2.0.jar,file:///usr/hdp/current/hive-webhcat/share/hcatalog/hive-hcatalog-streaming.jar -hiveconf hive.metastore.uris= 

1.2 根据进程号,查jstat的gc信息

root@tbds-10-x-xx-x:/data/var>jstat -gcutil 219045 2000
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
  0.00   0.00   0.00  88.12  73.03  36.52  14741 3097.156     3   94.687 3191.843
  0.00   0.00   0.00  88.12  73.03  36.52  14741 3097.156     3   94.687 3191.843
  0.00   0.00   0.00  88.12  73.03  36.52  14741 3097.156     3   94.687 3191.843
  0.00   0.00   0.00  88.12  73.03  36.52  14741 3097.156     3   94.687 3191.843

在这里插入图片描述

发现fullGC后,老年代,还是很满(FullGC的次数由2变到3)。

在这里插入图片描述
艰难的fullGC,
经过28s的fullGC,顺利完成gc,但老年代92.19%,按照目前趋势 应该明天凌晨就跑挂,看看预言成真不。。。

在这里插入图片描述

二、heap dump分析

2.1 把hiveServer2的heap dump回来

经过FullGC后进行的heap dump.
-dump:live 只要存活的对象

hive@tbds-x-x-x-x:/data/var/hiveDump>jmap -dump:live,format=b,file=/data/var/hiveDump/hiveserver2.afterFgc.dump.bin 219045
Dumping heap to /data/var/hiveDump/hiveserver2.dump.bin ...
Heap dump file created

dump回来,发现文件大小17G。

2.2 使用eclipse memory analyzer进行分析

修改EMA的MemoryAnalyzer.ini,把Xmx改为28G, -Xmx28672m.(我的电脑32G)

2.3 leak suspects

发现问题:
问题1: 7627个org.apache.hadoop.hive.ql.exec.UDFClassLoader 占用4.1G内存
问题2:16585个log4jd的RandomAccessFile占用 4.1G内存
问题3:java.util.jar.JarFile占用2.9G
这三个对象把都实例放到HashMap上进行缓存,导致实例永远在FullGC时都可达,导致无法进行回收。

在这里插入图片描述
在这里插入图片描述

Shallow 与 Retained的区别
Shallow Size
Shallow Size是对象本身占据的内存的大小,不包含其引用的对象。对于常规对象(非数组)的Shallow Size由其成员变量的数量和类型来定,而数组的ShallowSize由数组类型和数组长度来决定,它为数组元素大小的总和。

Retained Size
Retained Size=当前对象大小+当前对象可直接或间接引用到的对象的大小总和。(间接引用的含义:A->B->C,C就是间接引用) ,并且排除被GC Roots直接或者间接引用的对象

换句话说,Retained Size就是当前对象被GC后,从Heap上总共能释放掉的内存。
不过,释放的时候还要排除被GC Roots直接或间接引用的对象。他们暂时不会被被当做Garbage。

最大的retain heap
请添加图片描述

有busy monitor thread
请添加图片描述

请添加图片描述

2.4 dominatorTree对象占用空间比例

下图中,大的对象,无法回收
第一个MedatadataProvider一看就是里面用了享元模式(缓存),数据是无法回收的。其他系统类无法回收,最后的UDFClassLoader占用589k,看上去不大,但有7627个(2.3的问题1中分析出这个数字)。7627个*589k/1024/1024=4.28G。恐怖,全部无法回收。

请添加图片描述

2.5 整个jstat后台脚本,记录gc情况

脚本

root@tbds-x-x-x-37:/data/var>s nohup jstat -gcutil 219045 2000 > /data/var/hiveserver.gcutil.20220221.log 2>&1 &

第二天上班,发现的确凌晨挂了。
挂前的jstat信息:

  S0     S1       E     O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
  0.00   0.00   0.00  99.99  71.97  35.45  21507 5736.954   547 16373.339 22110.293
  0.00   0.00  62.14  99.99  71.97  35.45  21508 5736.954   547 16403.868 22140.822
  0.00   0.00   0.00  99.99  71.99  35.46  21510 5738.118   548 16403.868 22141.986
  0.00   0.00   0.00  99.99  71.99  35.46  21510 5738.118   548 16403.868 22141.986
  0.00   0.00   0.00  99.99  71.99  35.46  21510 5738.118   548 16403.868 22141.986
  0.00   0.00   0.00  99.99  71.99  35.46  21510 5738.118   548 16403.868 22141.986
  0.00   0.00   0.00  99.99  71.99  35.46  21510 5738.118   548 16403.868 22141.986
  0.00   0.00   0.00  99.99  71.99  35.46  21510 5738.118   548 16403.868 22141.986
  0.00   0.00   0.00  99.99  71.99  35.46  21510 5738.118   548 16403.868 22141.986
  0.00   0.00   0.00  99.99  71.99  35.46  21510 5738.118   548 16403.868 22141.986
  0.00   0.00   0.00  99.99  71.99  35.46  21510 5738.118   548 16403.868 22141.986
  0.00   0.00   0.00  99.99  71.99  35.46  21510 5738.118   548 16403.868 22141.986
  0.00   0.00   0.00  99.99  71.99  35.46  21510 5738.118   548 16403.868 22141.986
  0.00   0.00   0.00  99.99  71.99  35.46  21510 5738.118   548 16403.868 22141.986
  0.00   0.00   0.00  99.99  71.99  35.46  21510 5738.118   548 16403.868 22141.986
  0.00   0.00   0.00  99.99  71.99  35.46  21510 5738.118   548 16403.868 22141.986
  0.00   0.00   0.00  99.99  71.99  35.46  21510 5738.118   548 16403.868 22141.986
  0.00   0.00   0.00  99.99  71.99  35.46  21510 5738.118   548 16403.868 22141.986
  0.00   0.00  61.76 100.00  71.97  35.46  21511 5738.118   548 16436.419 22174.538
  0.00   0.00   0.00 100.00  71.98  35.46  21516 5740.012   548 16436.419 22176.431
  0.00   0.00   0.00 100.00  71.98  35.46  21517 5740.730   549 16436.419 22177.149
  0.00   0.00   0.00 100.00  71.98  35.46  21517 5740.730   549 16436.419 22177.149
  0.00   0.00   0.00 100.00  71.98  35.46  21517 5740.730   549 16436.419 22177.149
  0.00   0.00   0.00 100.00  71.98  35.46  21517 5740.730   549 16436.419 22177.149
  0.00   0.00   0.00 100.00  71.98  35.46  21517 5740.730   549 16436.419 22177.149
  0.00   0.00   0.00 100.00  71.98  35.46  21517 5740.730   549 16436.419 22177.149
  0.00   0.00   0.00 100.00  71.98  35.46  21517 5740.730   549 16436.419 22177.149
  0.00   0.00   0.00 100.00  71.98  35.46  21517 5740.730   549 16436.419 22177.149
  0.00   0.00   0.00 100.00  71.98  35.46  21517 5740.730   549 16436.419 22177.149
  0.00   0.00   0.00 100.00  71.98  35.46  21517 5740.730   549 16436.419 22177.149
  0.00   0.00   0.00 100.00  71.98  35.46  21517 5740.730   549 16436.419 22177.149
  0.00   0.00   0.00 100.00  71.98  35.46  21517 5740.730   549 16436.419 22177.149
  0.00   0.00   0.00 100.00  71.98  35.46  21517 5740.730   549 16436.419 22177.149
  0.00   0.00   0.00 100.00  71.98  35.46  21517 5740.730   549 16436.419 22177.149
  0.00   0.00   0.00 100.00  71.98  35.46  21517 5740.730   549 16436.419 22177.149
  0.00   0.00   0.00  99.98  71.98  35.46  21518 5741.179   550 16466.653 22207.833
  0.00   0.00   0.00  99.98  71.98  35.46  21518 5741.179   550 16466.653 22207.833
  0.00   0.00   0.00  99.98  71.98  35.46  21518 5741.179   550 16466.653 22207.833
  0.00   0.00   0.00  99.98  71.98  35.46  21518 5741.179   550 16466.653 22207.833
  0.00   0.00   0.00  99.98  71.98  35.46  21518 5741.179   550 16466.653 22207.833
  0.00   0.00   0.00  99.98  71.98  35.46  21518 5741.179   550 16466.653 22207.833
  0.00   0.00   0.00  99.98  71.98  35.46  21518 5741.179   550 16466.653 22207.833
  0.00   0.00   0.00  99.98  71.98  35.46  21518 5741.179   550 16466.653 22207.833
  0.00   0.00   0.00  99.98  71.98  35.46  21518 5741.179   550 16466.653 22207.833
  0.00   0.00   0.00  99.98  71.98  35.46  21518 5741.179   550 16466.653 22207.833
  0.00   0.00   0.00  99.98  71.98  35.46  21518 5741.179   550 16466.653 22207.833
  0.00   0.00   0.00  99.98  71.98  35.46  21518 5741.179   550 16466.653 22207.833
  0.00   0.00   0.00  99.98  71.98  35.46  21518 5741.179   550 16466.653 22207.833
  0.00   0.00   0.00  99.98  71.98  35.46  21518 5741.179   550 16466.653 22207.833
  0.00   0.00   0.00  99.98  71.98  35.46  21518 5741.179   550 16466.653 22207.833
  0.00   0.00  62.00  99.98  71.98  35.46  21519 5741.179   550 16496.641 22237.821
  0.00   0.00   0.00  99.98  71.98  35.46  21520 5741.951   551 16496.641 22238.592
  0.00   0.00   0.00  99.98  71.98  35.46  21520 5741.951   551 16496.641 22238.592
  0.00   0.00   0.00  99.98  71.98  35.46  21520 5741.951   551 16496.641 22238.592
  0.00   0.00   0.00  99.98  71.98  35.46  21520 5741.951   551 16496.641 22238.592
  0.00   0.00   0.00  99.98  71.98  35.46  21520 5741.951   551 16496.641 22238.592
  0.00   0.00   0.00  99.98  71.98  35.46  21520 5741.951   551 16496.641 22238.592
  0.00   0.00   0.00  99.98  71.98  35.46  21520 5741.951   551 16496.641 22238.592
  0.00   0.00   0.00  99.98  71.98  35.46  21520 5741.951   551 16496.641 22238.592
  0.00   0.00   0.00  99.98  71.98  35.46  21520 5741.951   551 16496.641 22238.592
  0.00   0.00   0.00  99.98  71.98  35.46  21520 5741.951   551 16496.641 22238.592
  0.00   0.00   0.00  99.98  71.98  35.46  21520 5741.951   551 16496.641 22238.592
  0.00   0.00   0.00  99.98  71.98  35.46  21520 5741.951   551 16496.641 22238.592
  0.00   0.00   0.00  99.98  71.98  35.46  21520 5741.951   551 16496.641 22238.592
  0.00   0.00   0.00  99.98  71.98  35.46  21520 5741.951   551 16496.641 22238.592
  0.00   0.00   0.00  99.98  71.98  35.46  21520 5741.951   551 16496.641 22238.592
  0.00   0.00   0.00  99.98  71.99  35.46  21524 5742.970   551 16526.578 22269.549
  0.00   0.00   0.00  99.98  71.99  35.46  21527 5744.093   552 16526.578 22270.672
  0.00   0.00   0.00  99.98  71.99  35.46  21527 5744.093   552 16526.578 22270.672
  0.00   0.00   0.00  99.98  71.99  35.46  21527 5744.093   552 16526.578 22270.672
  0.00   0.00   0.00  99.98  71.99  35.46  21527 5744.093   552 16526.578 22270.672
  0.00   0.00   0.00  99.98  71.99  35.46  21527 5744.093   552 16526.578 22270.672
  0.00   0.00   0.00  99.98  71.99  35.46  21527 5744.093   552 16526.578 22270.672
  0.00   0.00   0.00  99.98  71.99  35.46  21527 5744.093   552 16526.578 22270.672
  0.00   0.00   0.00  99.98  71.99  35.46  21527 5744.093   552 16526.578 22270.672
  0.00   0.00   0.00  99.98  71.99  35.46  21527 5744.093   552 16526.578 22270.672
  0.00   0.00   0.00  99.98  71.99  35.46  21527 5744.093   552 16526.578 22270.672
  0.00   0.00   0.00  99.98  71.99  35.46  21527 5744.093   552 16526.578 22270.672
  0.00   0.00   0.00  99.98  71.99  35.46  21527 5744.093   552 16526.578 
<think> 嗯,用户这次的问题很具体,是关于Hive Metastore使用PostgreSQL作为后端时,连接超时是否会导致Hive进程掉。看来用户遇到了生产环境中的稳定性问题,需要明确的技术判断。 从引用[1]提到的生产环境问题来看,用户可能正在经历Metastore相关的性能瓶颈。引用[3]展示了元数据访问的完整链条:Hive客户端→Metastore服务→关系数据库(HMS)→HDFS,其中PostgreSQL就是HMS的存储层。这里的关键在于区分“超时”和“崩溃”的区别。 根据引用[4]的高可用方案,真正的Hive进程掉需要同时满足两个条件:一是连接超时后客户端重试机制耗尽(hive.metastore.failure.retries参数),二是没有配置Metastore高可用。引用[5]提到maxSize参数控制数据库连接数,如果连接泄漏确实可能引发雪崩效应。 用户没有明确说是否配置了高可用,所以需要分情况说明。引用[2]的metatool修复命令提示用户可能已经遇到元数据不一致的情况,这往往是连接问题的前兆。值得提醒用户检查PostgreSQL的max_connections配置是否足够,这个细节在引用[5]的“数据库过载”部分有暗示。 考虑到用户连续询问Metastore问题,应该补充数据库层超时的具体日志特征(如PSQLException),这样用户能更快定位问题。引用[1]提到的“Lock wait timeout”在PostgreSQL中表现为行锁竞争,这和MySQL的行为不同,需要单独说明。 最后生成的相关问题要聚焦在PostgreSQL场景:连接池配置建议、死锁处理、WAL日志分析等,这些都是用户后续可能需要的。特别要加入vacuum维护的提醒,因为PostgreSQL的MVCC机制在频繁DDL时容易引发元数据查询性能下降。 </think> Hive Metastore 使用 PostgreSQL 作为后端数据库时,访问超时**通常不会直接导致 Hive 进程(如 HiveServer2 或 CLI)掉**,但会引发严重故障,具体影响如下: --- ### 一、超时的核心影响 1. **Hive 客户端/作业阻塞或失败** - Hive 客户端(如 Beeline)或提交的作业(MapReduce/Spark)在访问 Metastore 超时后: - **重试机制**:客户端会根据配置(如 `hive.metastore.failure.retries`[^5])尝试重连。 - **超时阈值触发失败**:若重试后仍超时,作业会抛出异常(如 `MetaException`),导致**查询失败**,但**Hive 进程本身不会崩溃**。 - 典型报错: ```plaintext FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient ``` 2. **Metastore 服务稳定性受损** - PostgreSQL 连接超时可能因以下原因加剧问题: - **连接池耗尽**:若超时导致连接未释放,连接池(如 `c3p0.maxSize`[^5])耗尽后,新请求将被阻塞。 - **线程阻塞**:Metastore Server 处理线程因等待数据库响应而卡死,表现为服务**无响应**(但进程仍在运行)。 3. **级联故障风险** - 若 Metastore 因超时长时间无响应: - **HiveServer2 拒绝请求**:客户端可能收到 `Connection refused` 错误。 - **资源耗尽**:持续超时可能导致 Metastore 进程内存溢出(OOM)[^1],最终**进程崩溃**。 --- ### 二、关键配置与缓解措施 1. **超时控制参数** 在 `hive-site.xml` 中优化: ```xml <!-- Metastore 客户端超时 --> <property> <name>hive.metastore.client.socket.timeout</name> <value>60</value> <!-- 单位:秒 --> </property> <!-- 数据库连接池最大等待时间 --> <property> <name>hive.metastore.connection.pool.max.wait.millis</name> <value>30000</value> <!-- 单位:毫秒 --> </property> ``` 2. **PostgreSQL 优化** - **连接池配置**:限制最大连接数,避免过载(`c3p0.maxSize`)[^5]。 - **查询优化**:对 Metastore 高频查询表(如 `TBLS`, `PARTITIONS`)建立索引。 - **网络稳定性**:确保 PostgreSQL 与 Metastore 间低延迟网络。 3. **高可用部署**(根本性方案) - **Metastore 高可用**:部署多个 Metastore 实例,通过负载均衡(如 HAProxy)分发请求[^4]。 - **PostgreSQL 高可用**:采用主从复制+自动故障转移(如 Patroni),避免单点故障[^4]。 --- ### 三、典型故障场景与解决方案 | **场景** | **现象** | **解决方案** | |-----------------------------------|------------------------------|------------------------------------------| | PostgreSQL 响应慢 | 作业卡在 “Compiling Query” 阶段[^1] | 优化 PostgreSQL 慢查询,增加连接超时阈值 | | Metastore 连接池耗尽 | 日志报 “Timeout waiting for connection”[^1] | 调整 `c3p0.maxSize` 和 `idle.timeout`[^5] | | PostgreSQL 宕机 | 所有依赖 Metastore 的服务不可用 | 启用数据库高可用 + Metastore 客户端重试 | --- ### 结论 - **直接掉?** ❌ Hive 进程(HiveServer2/Metastore)通常不会因单次超时崩溃,但可能因资源耗尽(OOM)或持续阻塞最终停止响应。 - **如何避免?** **核心方案**: 1. 配置合理的超时和重试参数 2. 部署 Metastore 和 PostgreSQL 高可用集群[^4] 3. 监控数据库性能与连接池状态[^5] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值