首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

HiveServer2 文件描述符泄漏

编程知识
2024年09月20日 14:23

 

现象

用户反馈 hs2 打开的文件描述符的数量一直在涨,但是当前 hs2 的连接只有个位数。

wecom-temp-86668-466aa580e0ca33aef0dd18c39de36447.png

 

排查过程

首先找到 hs2 进程持有了哪些文件描述符,通过 lsof 命令 lsof -p $pid ,看到 hs2 进程确实在 /data/emr/hive/tmp/operation_logs/ 目录下打开了大量描述符

在 jira 中找到一个类似 的 issue: [HIVE-10970] Investigate HIVE-10453: HS2 leaking open file descriptors when using UDFs - ASF JIRA (apache.org)

但是这个场景是由于 UDF 导致的 fd 泄漏,并且泄漏路径是在 hive.downloaded.resources.dir 路径下,跟 operation_logs 目录不一样.看上去不是同一个问题

排查源码 , 找到 operation log 有一个清理逻辑
org.apache.hive.service.cli.operation.Operation#cleanupOperationLog

猜测是在客户端 session 异常结束 的时候,这个方法没有被正常调用到或者清理逻辑有漏洞导致的

首先过一遍 session 关闭的逻辑,通过分析 beeline 客户端的火焰图,找到 session 关闭起始点
org.apache.hive.jdbc.HiveStatement#closeClientOperation
Pasted image 20230303195911.png

这里 client 发起了一个 thrift rpc 调用,然后在 hs2 thrift 找到 thrift server 对应的方法 org.apache.hive.service.cli.thrift.ThriftCLIService#CloseOperation
跟踪这个方法,最终会走到 org.apache.hive.service.cli.operation.SQLOperation#close
这里会调用 cleanupOperationLog 方法
Pasted image 20230303200607.png

那么确实是有可能由于客户端 session 异常退出,operation logs 没有被清理的可能的

接着查看 cleanupOperationLog 逻辑, 看这里是否有代码 bug ,于是在 idea 中使用 git 分支比较功能,发现 3.1 版本提交了一个修复

Pasted image 20230303193129.png

[HIVE-18820] Operation doesn't always clean up log4j for operation log - ASF JIRA (apache.org)

 

结论

  • 客户端 session 异常退出,导致 operation logs 没有被清理,跟 scratch dir 没有被清理场景类似
  • HIVE-18820 社区 bug 导致,可以考虑合入这个 patch
From:https://www.cnblogs.com/hdpdriver/p/18422577
本文地址: http://shuzixingkong.net/article/2161
0评论
提交 加载更多评论
其他文章 Nuxt Kit 中的模板处理
title: Nuxt Kit 中的模板处理 date: 2024/9/20 updated: 2024/9/20 author: cmdragon excerpt: 摘要:本文详细介绍了在Nuxt 3框架中,使用Nuxt Kit进行模板处理的方法,包括理解模板基本概念、使用addTemplate动
Nuxt Kit 中的模板处理 Nuxt Kit 中的模板处理
Java Pom两个模块需要互相引用怎么办
本文简要介绍了Java POM模块化是什么、Java Pom两个模块需要互相引用方法示例、如何使用Maven模块化的内容,给出了详细的代码示例,清晰直观。
深入理解Java对象结构
一、Java对象结构 实例化一个Java对象之后,该对象在内存中的结构是怎么样的?Java对象(Object实例)结构包括三部分:对象头、对象体和对齐字节,具体下图所示 1、Java对象的三部分 (1)对象头 对象头包括三个字段,第一个字段叫作Mark Word(标记字),用于存储自身运行时的数据,
深入理解Java对象结构 深入理解Java对象结构 深入理解Java对象结构
RAG+Agent人工智能平台:RAGflow实现GraphRA知识库问答,打造极致多模态问答与AI编排流体验
RAG+Agent人工智能平台:RAGflow实现GraphRA知识库问答,打造极致多模态问答与AI编排流体验
RAG+Agent人工智能平台:RAGflow实现GraphRA知识库问答,打造极致多模态问答与AI编排流体验 RAG+Agent人工智能平台:RAGflow实现GraphRA知识库问答,打造极致多模态问答与AI编排流体验 RAG+Agent人工智能平台:RAGflow实现GraphRA知识库问答,打造极致多模态问答与AI编排流体验
【linux】【docker】Docker默认网段配置导致无法访问
背景 集团有N个基地,所有基地的网络使用的是172.x.x.x网段,这本身没有什么问题!但Docker默认的桥接网段也是172.17.x.x的,如果不修改docker的默认配置会导致个别基地无法访问!列举几个基地使用的网段 基地 网段 A基地 172.30.x.x B基地 172.28.x.x C基
将双通道音频转换为两条单通道音频的解决方案
方案一 代码 在Python中,可以使用wave模块来读取双通道(立体声)音频文件,并将每个通道分别保存为独立的音频文件。以下是一个简单的示例,演示了如何实现这一过程: import wave # 打开双通道音频文件 with wave.open('stereo_audio.wav'
彻底理解 IP 地址,子网掩码,子网划分
原文地址:彻底理解 IP 地址,子网掩码,子网划分 什么是 IP 协议 在回答什么是 IP 协议前,我们先需要回答另外一个问题:什么是网络?从普通人的角度看,网络无非是手机上的一个 WIFI 标志,是电脑上一根网线而已。但是从学术角度上看,网络是一组硬件软件的集合体,是无数先贤的汗水与智慧的结晶,是
彻底理解 IP 地址,子网掩码,子网划分 彻底理解 IP 地址,子网掩码,子网划分 彻底理解 IP 地址,子网掩码,子网划分
MySQL linux下安装,配置,免密登录与基本认识
目录MySQL卸载环境查看是否已安装MySQL卸载mysql服务查看是否卸载干净MySQL安装查看linux版本选择MySQL版本获取mysql官方yum源rpm安装mysql官方yum源安装mysql服务查看是否安装成功配置MySQL简单登录mysql命令免密登录配置my.cnf 其他配置项设置开
MySQL linux下安装,配置,免密登录与基本认识 MySQL linux下安装,配置,免密登录与基本认识 MySQL linux下安装,配置,免密登录与基本认识