hive3.X的HiveServer2 内存泄漏问题定位与优化方案(bug)

Hive遇到内存问题,源于OperationManager中queryId操作清理不当。解决方案是将queryId从HiveSession级别移到Operation级别。Hive4.0已修复但3.x需自行修复,涉及jar包替换。
摘要由CSDN通过智能技术生成

参考文档:
https://juejin.cn/post/7141331245627080735?searchId=20230920140418F85636A0735C03971F71

官网社区:
https://issues.apache.org/jira/browse/HIVE-22275

In the case that multiple statements are run by a single Session before being cleaned up, it appears that OperationManager.queryIdOperation is not cleaned up properly.
See the log statements below - with the exception of the first “Removed queryId:” log line, the queryId listed during cleanup is the same, when each of these handles should have their own queryId. Looks like only the last queryId executed is being cleaned up.

As a result, HS2 can run out of memory as OperationManager.queryIdOperation grows and never cleans these queryIds/Operations up.

解决
既然找到了问题,那么解决方案就清楚了,那便是将 Query Id 这个值设置成 Operation 级别,而不是 HiveSession 级别,此问题影响 Hive3.x 版本,2.x 暂时没有这个特性,因此不受影响。再对照官方已知的 issue,此问题是已知 issue,目前 Hive 已经将此问题修复,且合入了4.0的版本,
但是由于该 issue 是针对 4.0.0 的代码修复的,对于 3.x 系列并没有 patch,直接 cherry-pick 将会有大量的代码不兼容,因此需要自行参考进行修复,修复的思路为给 Operation 新增:
在这里插入图片描述

将 Query Id 从 HiveSession 级别移除,存入 Operation 级别,同时更新 Query Id 的获取和设置:

在这里插入图片描述
对 Hive 进行重新打包,在现有集群上对 hive-service-x.x.x.jar 进行替换,即可修复此问题。

hive --service hiveserver2 --hiveconf hive.server2.thrift.port=21066 是一个用于启动HiveServer2服务并将Thrift端口设置为21066的命令。 Hive是一个基于Hadoop的数据仓库工具,用于处理和分析大规模的数据集。HiveServer2是Hive的服务器模式,允许用户通过Thrift接口与Hive交互。通过运行上述命令,我们可以启动HiveServer2服务并将Thrift端口设置为21066,这样客户端就可以连接到HiveServer2并执行查询和操作。 启动HiveServer2服务可以让用户通过网络连接到Hive,并通过执行SQL语句查询和操作存储在Hive中的数据。在启动服务时,我们可以通过--hiveconf参数设置一些Hive的配置属性。在上述命令中,通过指定hive.server2.thrift.port属性为21066,我们将Thrift端口设置为21066,这样客户端就可以通过该端口与HiveServer2通信。 通过启动HiveServer2服务,我们可以在分布式环境中运行Hive,并允许多个客户端同时连接和使用Hive。这样可以提高数据处理的效率和灵活性。同时,通过Thrift接口,HiveServer2还可以与其他编程语言进行交互,例如Java、Python等,使得开发人员可以方便地使用自己熟悉的编程语言进行数据处理和分析。 总之,hive --service hiveserver2 --hiveconf hive.server2.thrift.port=21066 是一个启动HiveServer2服务并将Thrift端口设置为21066的命令,通过这个命令我们可以连接到HiveServer2并使用Hive进行数据处理和分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值