hive 锁表,导致不能insert ,update 以及drop table 也不行,,解除hive锁表终极 解决方案!!!!

    今天遇见hive插入的时候卡死不执行的问题

   (直接上图)

     hive 锁表,导致不能insert ,update 以及drop table 也不行,,解除hive锁表终极 解决方案!!!!

起初我以为是hive启动报错,把日志调整到debugger级别查看

hive 锁表,导致不能insert ,update 以及drop table 也不行,,解除hive锁表终极 解决方案!!!!

发现该表被锁了。(PS:找了半天终于找到问题了)

起初想着先把表删掉看看,结果表被锁定以后 不能drop

hive 锁表,导致不能insert ,update 以及drop table 也不行,,解除hive锁表终极 解决方案!!!!

卡死不往下执行,无论是drop 还是insert 或者 update

于是各种网上搜索 ,hive怎么解除锁表(直接上图)

hive 锁表,导致不能insert ,update 以及drop table 也不行,,解除hive锁表终极 解决方案!!!!

先查看一下 是否锁表(肯定是锁了,只是进一步查看都哪些表被锁)

hive 锁表,导致不能insert ,update 以及drop table 也不行,,解除hive锁表终极 解决方案!!!!

(一页还没显示完,下面还有就不截图了)不看不知道一看吓一跳,将近一百条 锁表信息。尤其是状态为EXCLUSIVE的。锁表状态为EXCLUSIVE 是排它锁 也就是你不能insert和update的罪魁祸首。。

很多人说用 unlock table your_tableName这种方式解除锁表。试试看

hive 锁表,导致不能insert ,update 以及drop table 也不行,,解除hive锁表终极 解决方案!!!!

结果报错,,我开启的事务 不支持显示的锁。

又试了试 hive.support.concurrency=false 这种方法,更不行。因为我开启的事务 就必须为true的;

这可难倒我了。继续百度,谷歌各种扒。甚至有人丧心病狂直接换hive在mysql中的元数据库的,曾经做过测试,如果有数据的情况下最好不要随便更换元数据的数据库不然hive中的表通通都找不到了,除非你很熟悉hive元数据在mysql中的存储规则。。(不过这点倒是提醒了我)。

我也是使用的mysql作为hive 的元数据的,hive的表,字段信息等元数据都储存在mysql中,那会不锁表的信息也存在mysql中呢。

打开mysql查看

hive 锁表,导致不能insert ,update 以及drop table 也不行,,解除hive锁表终极 解决方案!!!!

果然发现了一个叫hive_locks的表,,,哈哈。证明我的猜想是对的。

hive 锁表,导致不能insert ,update 以及drop table 也不行,,解除hive锁表终极 解决方案!!!!

先查询一下这张表,,跟之前上面在hive中查询show locks 出来的结果很像。看来应该是找对了。

hive 锁表,导致不能insert ,update 以及drop table 也不行,,解除hive锁表终极 解决方案!!!!

删掉,统统删掉!!!!

然后再来hive中show locks一下

hive 锁表,导致不能insert ,update 以及drop table 也不行,,解除hive锁表终极 解决方案!!!!

锁表的信息已经没了!!!没了!!

于是测试一下删表(最简单就是删表,update和insert写起来太麻烦~~由于我这个表是外部表 不用担心里面的数据被删除掉)

hive 锁表,导致不能insert ,update 以及drop table 也不行,,解除hive锁表终极 解决方案!!!!

成功!!!!

从早上十点搞到现在 凌晨一点多 这个问题终于被攻克。。