1. 程式人生 > >hive 鎖表,導致不能insert ,update 以及drop table 也不行,,解除hive鎖表終極 解決方案!!!!

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寫起來太麻煩~~由於我這個表是外部表 不用擔心裡面的資料被刪除掉)


成功!!!!

從早上十點搞到現在 凌晨一點多 這個問題終於被攻克。。