场景:
在执行insert into或insert overwrite任务时,中途手动将程序停掉,会出现卡死情况(无法提交MapReduce),只能执行查询操作,而drop insert操作均不可操作,无论执行多久,都会保持卡死状态
临时解决办法是……把表名换一个……
根本原因是:hive表被锁或者某个分区被锁,需要解锁
show locks 表名:
可以查看表被锁的情况
解锁
unlock table 表名; -- 解锁表
unlock table 表名 partition(dt='2020-04-09'); -- 解锁某个分区
注意
表锁和分区锁是两个不同的锁,对表解锁,对分区是无效的,分区需要单独解锁
补充
hive存在两种锁,共享锁Shared (S)和互斥锁Exclusive (X),
其中只触发s锁的操作可以并发的执行,只要有一个操作对表或者分区出发了x锁,则该表或者分区不能并发的执行作业。
各个操作锁出发的锁如下:
hql命令 | 锁类型 |
---|---|
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 |
网友评论