hive锁表

Hive 解锁操作

之前使用Hive,出现过一种情况:在代码正在执行insert into或insert overwrite时,中途手动将程序停掉,会出现卡死情况,只能执行查询操作,而drop insert操作均不可操作,无论执行多久,都会保持卡死状态,问同事有人遇到过,但是他的解决办法是……把表名换一个……
后来废了九牛二虎之力,终于找到了一篇靠谱的博客,是说hive表被锁,需要解锁后,方可操作。
hive锁
这两篇文章解决了当时没有分区表的锁问题,但是……前几天,问题又来了,在etl过程中,由于全表全量覆盖,由于各种原因,没有按时操作成功,那么在使用这张表的时候就会出现表被锁,卡死状态,若是关键业务表,那么相关业务任务均会受到牵连。后,但是问题是,之前锁的都是整张表,而此次死锁还包括分区shared锁,之前并没有看到过,百度了一通,一条分区相关解锁的结果都没有找到,最后……求助Google,庆幸的是,真的有结果,提供了解锁分区锁的方法:
Hive Unlock All Partitions
unlock table your_table partition(dt=‘2014-04-01’);

如果当hive 执行一个脚本查询的过程中,由于你的脚本进程遇到不可控的原因被杀死,这时你再去删除hive表中你查询关联到的表是无法删除的。
你可以使用命令 show locks tablename;查看你的表状态

hive> show locks days_album_click_play;
OK
pb_log@days_album_click_play EXCLUSIVE
1
2
3
可以看到此表有一个EXCLUSIVE 锁,即排它锁,所有你的表是无法删除的

解决方法:
1.JPS 查看java进程

[root@10.10.121.58 common]# jps
48828 RunJar
22349 RunJar
37087 – process information unavailable
33123 Jps

你会发现有两个RunJar 进程,37087进程其实是一个datanode,因为我用的是cloudera,hdfs使用hdfs用户启动的,所有root用户是看不到真实进程名称的。对于这两个RunJar进程一我们需要仔细看一下

2.执行命令 ps -aux | grep 48828

你会看到这个进程有一个hql的查询,并且处于Sl状态,睡眠状态。

3.执行命令 kill -9 48828

[root@10.10.121.58 common]# kill -9 48828
1
将进程杀死,对于第二个RunJAR同理,这里不再赘述。

4.这时再删除表就可以了

hive> drop table days_album_click_play;
OK

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值