hive锁的问题
最近在insert into 插入数据的时候遇到了hive锁表的问题,下面是报错信息,原因就是一张hive的临时表被锁造成报错。
1.Hive中定义了两种锁的模式:
共享锁(S)和排它锁(X),顾名思义,多个共享锁(S)可以同时获取,但是排它锁(X)会阻塞其它所有锁。
如果select一张表,这张表则会进入shared模式,增加、插入、删除、修改数据和修改表名等操作都会在shared锁被释放之后再执行,会一直等待。
如果插入、删除、修改数据则进入Exclusive锁模式,进入排他锁模式之后不允许增删改操作,会报错。
2.查看表被锁的情况:
show locks table_name;
3.解锁
a.unlock table table_name; – 解锁表
b.unlock table table_name partition(dt=‘2020-06-27’); – 解锁某个分区
c.关闭锁机制:set hive.support.concurrency=false; 默认为true
d.在报错的sql中加入下列语句:
set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DummyTxnManager;
e.终极解决办法 直接找到 hive-site.xml 配置文件
[hadoop@hadoop01 ~]$ find / -name hive-site.xml
[hadoop@hadoop01 conf]$ vi hive-site.xml
// 追加
<property>
<name>set hive.txn.manager</name>
<value>org.apache.hadoop.hive.ql.lockmgr.DummyTxnManager</value>
</property>
4.注意:
(1).表锁和分区锁是两个不同的锁,对表解锁,对分区是无效的,分区需要单独解锁
(2).hive-site.xml中如有下列配置(可以不配置,因为默认为true)一定设置为true,如果设置成false则会报错!!!
<property>
<name>set hive.support.concurrency</name>
<value>true</value>
</property>