hive表锁定问题(Locks on the underlying objects cannot be acquired)

一、删除表失败

1.1 描述?

创建了一张临时表但是在插入数据后删除表时报错
在这里插入图片描述

1.2 为什么会产生?

因为在hive0.7版本之后开始支持并发,线上环境默认是用zookeeper做hive的锁管理,Hive开启并发功能的时候自动开启锁功能。

1.3 如何解决?

set hive.support.concurrency=false;
drop table table_name;

1.4 排查过程

1.4.1.查看表是否被锁定

SHOW LOCKS <TABLE_NAME>;
SHOW LOCKS <TABLE_NAME> extended;
SHOW LOCKS <TABLE_NAME> PARTITION (<PARTITION_DESC>);
SHOW LOCKS <TABLE_NAME> PARTITION (<PARTITION_DESC>) extended;

!–返回结果,会告知是否产生锁–

1.4.2.解决表被锁死问题

set hive.support.concurrency=false; 默认为true
!--或者--
unlock table table_name;

1.5 详解原理

hive 目前主要有两种锁,SHARED(共享锁 S)和 Exclusive(排他锁 X)。共享锁 S 和 排他锁 X 它们之间的兼容性矩阵关系如下:
在这里插入图片描述
总结起来就是:
1)查询操作使用共享锁,共享锁是可以多重、并发使用的
2)修改表操作使用独占锁,它会阻止其他的查询、修改操作
3)可以对分区使用锁。
以下情况会出发锁,以及它的类型和锁定范围如下:
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章