一、删除表失败
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)可以对分区使用锁。
以下情况会出发锁,以及它的类型和锁定范围如下: