hive sql无法停止

排查流程

hive任务停止是调用org.apache.hive.jdbc.HiveStatement的close()方法实现的

其底层是委托给org.apache.hive.service.cli.thrift.TCLIService.Iface客户端实例来实现。

同时,通过JDK动态代理为其织入了synchronized同步机制:其底层是委托给org.apache.hive.service.cli.thrift.TCLIService.Iface客户端实例来实现。

与此同时,原运行Hive的线程也在循环中通过客户端实例来获取该Hive SQL运行状态

而synchronized锁是非公平的,因此停止Hive线程客户端可能一直无法获取对象锁,从而无法进入停止流程。因此修改HiveStatement的JDK动态代理逻辑,改为使用ReentrantLock,并将其设置为公平锁,从而客户端获取锁序列为公平的,从而让停止线程能正常获取客户端实例锁进行操作。

解决方案

按照以上思路查询源码,在高版本和低版本的客户端中都有使用ReentrantLock作为对象锁的代码,选择以上版本的客户端版本即可

相关推荐
姜太小白10 小时前
【Oracle】记排查sh脚本调用SQL执行卡顿的排查总结
数据库·sql·oracle
镜舟科技12 小时前
为什么 Text-to-SQL 总是停在 Demo?
数据库·sql·demo·text-to-sql·镜舟科技·mip·语义视图
大牧师13 小时前
TypeORM 学习教程
数据库·sql·学习·node.js·orm·nest.js·typeorm
数智启示录15 小时前
PostgreSQL 执行计划实战(第 9 篇):SQL 和索引没变,计划为什么突然慢一百倍
数据库·经验分享·sql·postgresql·面试
润乾软件16 小时前
SQLazy:从事件表中查出下一组的开始时刻
sql·sqlazy
BYSJMG16 小时前
大数据毕业设计选题推荐:基于大数据的全球气温历史演变分析与可视化,用Hadoop+Spark处理
大数据·hadoop·分布式·信息可视化·spark·kmeans·课程设计
养生技术人17 小时前
Oracle OCP认证考试题目详解082系列第17题
运维·数据库·sql·oracle·ocp
fastjson_17 小时前
Hive 自定义函数
数据仓库·hive·hadoop
隔窗听雨眠18 小时前
活动中台系统慢SQL治理实践:从监控告警到性能优化的全链路方法论
sql·性能优化·github
Gent_倪18 小时前
MySQL 与 Hive 语法异同点详解
数据库·hive·mysql