hive锁表解决

查询是否锁表

show locks ;

发现表(fact_hz_zlfa)被锁,

临时解决方案

 

对表解锁

unlock table fact_hz_zlfa ;

解决方案:

find / -name hive-site.xml

 

关闭锁机制:

set hive.support.concurrency=false; 默认为true

 

 

hive lock报错

 
  FAILED: Error in acquiring locks: Locks on the underlying objects cannot be acquired. retry after some time

 解决办法:关闭并发,set hive.support.concurrency=false;

hive锁介绍:

hive存在两种锁,共享锁Shared (S)和互斥锁Exclusive (X),

 

其中只触发s锁的操作可以并发的执行,只要有一个操作对表或者分区出发了x锁,则该表或者分区不能并发的执行作业。
各个操作锁出发的锁如下:
Hive Command
Locks Acquired
select .. T1 partition P1
S on T1, T1.P1
insert into T2(partition P2) select .. T1 partition P1
S on T2, T1, T1.P1 and X on T2.P2
insert into T2(partition P.Q) select .. T1 partition P1
S on T2, T2.P, T1, T1.P1 and X on T2.P.Q
alter table T1 rename T2
X on T1
alter table T1 add cols
X on T1
alter table T1 replace cols
X on T1
alter table T1 change cols
X on T1
alter table T1 add partition P1
S on T1, X on T1.P1
alter table T1 drop partition P1
S on T1, X on T1.P1
alter table T1 touch partition P1
S on T1, X on T1.P1
*alter table T1 set serdeproperties *
S on T1
*alter table T1 set serializer *
S on T1
*alter table T1 set file format *
S on T1
*alter table T1 set tblproperties *
X on T1
drop table T1
X on T1
补充一条,load data (local) inpath ' ' into table xx partition() 出发的锁操作同insert
直接在hadoop上 hadoop dfs -put xx yy 不触发锁。(可以用在shell上 执行 hadoop dfs -put file hdfsmulu 这两天命令来代替 load data,避免锁)
load data 时若分区不存在会创建分区,而hadoop dfs -put不会, 需先调用alter table add partition来创建分区。 若一个操作正在读取表中数据,这时向表的分区中put数据,
该数据在本次读时不会被加载,下次读操作时才会被加载。
 
查看锁命令:
  • SHOW LOCKS <TABLE_NAME>;
  • SHOW LOCKS <TABLE_NAME> extended;
  • SHOW LOCKS <TABLE_NAME> PARTITION (<PARTITION_DESC>);
  • SHOW LOCKS <TABLE_NAME> PARTITION (<PARTITION_DESC>) extended;
对于不存在的分区,当表正在读时,利用load data 不能向新分区中导入数据,而采用alter table add partition 加上put的方式可以向其中导入数据(个人理解load data partition在
完成后才会触发更新元数据的操作,而在其未完成之前时需要load 数据的 由于该表的所以分区已经被加了s锁,故不能执行。而alter table add partition 该分区是新创建出来的,其它的
操作未对其执行加锁操作,把第二步put换为load data也是可以的)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值