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作为对象锁的代码,选择以上版本的客户端版本即可

相关推荐
动力 continue7 小时前
MySQL 基础篇 · SELECT 查询大
数据库·sql·mysql·select
先吃饱再说11 小时前
后端开发绕不开的 SQL:从建表、查询到索引优化,一篇讲透
数据库·后端·sql
fastjson_12 小时前
Hive 复杂数据类型
数据仓库·hive·hadoop
陈年老古董13 小时前
Shell 脚本编程基础完整学习笔记
linux·sql·mysql
爱吃面的猫14 小时前
大数据Hadoop之——集群环境搭建(了解)
大数据·hadoop·flume
冰暮流星14 小时前
MySQL 流程函数详解
数据库·sql·mysql
起名真的太难了16 小时前
Mysql的数据类型,查询与备份操作
数据库·sql·mysql
一路向北finish16 小时前
《Hadoop 高可用集群与 OpenStack Mitaka 控制节点部署全流程实操排坑指南》
大数据·linux·运维·服务器·hadoop·openstack
insertYam17 小时前
[hadoop高可用架构]
大数据·hadoop·架构