Hive锁表机制

Hive锁机制详解及应用
本文深入探讨了Hive中的共享锁(S)和互斥锁(X),详细介绍了各种操作触发的锁类型,并通过示例展示了如何使用这些锁进行表和分区的操作。同时,文章还提供了查看锁状态的方法及避免锁冲突的技巧。
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也是可以的)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值