hive 锁表,导致不能insert ,update 以及drop table 也不行,,解除hive锁表终极 解决方案!!!!
今天遇见hive插入的时候卡死不执行的问题
(直接上图)
起初我以为是hive启动报错,把日志调整到debugger级别查看
发现该表被锁了。(PS:找了半天终于找到问题了)
起初想着先把表删掉看看,结果表被锁定以后 不能drop
卡死不往下执行,无论是drop 还是insert 或者 update
于是各种网上搜索 ,hive怎么解除锁表(直接上图)
先查看一下 是否锁表(肯定是锁了,只是进一步查看都哪些表被锁)
(一页还没显示完,下面还有就不截图了)不看不知道一看吓一跳,将近一百条 锁表信息。尤其是状态为EXCLUSIVE的。锁表状态为EXCLUSIVE 是排它锁 也就是你不能insert和update的罪魁祸首。。
很多人说用 unlock table your_tableName这种方式解除锁表。试试看
结果报错,,我开启的事务 不支持显示的锁。
又试了试 hive.support.concurrency=false 这种方法,更不行。因为我开启的事务 就必须为true的;
这可难倒我了。继续百度,谷歌各种扒。甚至有人丧心病狂直接换hive在mysql中的元数据库的,曾经做过测试,如果有数据的情况下最好不要随便更换元数据的数据库不然hive中的表通通都找不到了,除非你很熟悉hive元数据在mysql中的存储规则。。(不过这点倒是提醒了我)。
我也是使用的mysql作为hive 的元数据的,hive的表,字段信息等元数据都储存在mysql中,那会不锁表的信息也存在mysql中呢。
打开mysql查看
果然发现了一个叫hive_locks的表,,,哈哈。证明我的猜想是对的。
先查询一下这张表,,跟之前上面在hive中查询show locks 出来的结果很像。看来应该是找对了。
删掉,统统删掉!!!!
然后再来hive中show locks一下
锁表的信息已经没了!!!没了!!
于是测试一下删表(最简单就是删表,update和insert写起来太麻烦~~由于我这个表是外部表 不用担心里面的数据被删除掉)
成功!!!!
从早上十点搞到现在 凌晨一点多 这个问题终于被攻克。。