hive锁机制及解锁

hive锁机制

hive存在两种锁,共享锁Shared (S)和互斥锁Exclusive (X),
其中只触发s锁的操作可以并发的执行,只要有一个操作对表或者分区出发了x锁,则该表或者分区不能并发的执行作业。
各个操作锁出发的锁如下:
hive锁机制及解锁_第1张图片

补充一条,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 ;
SHOW LOCKS extended;
SHOW LOCKS PARTITION ();
SHOW LOCKS PARTITION () extended;
对于不存在的分区,当表正在读时,利用load data 不能向新分区中导入数据,而采用alter table add partition 加上put的方式可以向其中导入数据(个人理解load data partition在完成后才会触发更新元数据的操作,而在其未完成之前时需要load 数据的 由于该表的所以分区已经被加了s锁,故不能执行。而alter table add partition 该分区是新创建出来的,其它的操作未对其执行加锁操作,把第二步put换为load data也是可以的)

解锁

查询是否锁表
show locks ;
发现表(tab1)被锁,

临时解决方案

对表解锁
unlock table tab1 ;

解决方案:
find / -name hive-site.xml

关闭锁机制:
set hive.support.concurrency=false; 默认为true

你可能感兴趣的:(Hadoop,踩坑记录,hive,hadoop,big,data)