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寫起來太麻煩~~由於我這個表是外部表 不用擔心裡面的資料被刪除掉)
成功!!!!
從早上十點搞到現在 凌晨一點多 這個問題終於被攻克。。