hive執行表操作指令卡死問題的解決

問題描述

在對hive表執行alert的時候,發現卡住不動了,退出後重進嘗試drop表,依然卡住不動。
找解決方案如下:

1.網上的方案:

先進入mysql,執行

show variables like 'char%'

查看character_set_database 的value是latin
然後把latin改成utf-8就好了,然後就解決了。

然而實際的情況不是這個樣子的,我這邊mysql裏面明明就是utf-8,那麼真相只有一個——鎖表了!
那麼只能自己想想辦法了

2.解鎖方案

進入hive,執行

show locks;

查看鎖表情況,發現如下
鎖表
可以看到裏面的那個Blocked By下的EXCLUSIVE

這裏簡單說一下:hive存在兩種鎖,共享鎖Shared (S)和互斥鎖Exclusive (X)
觸發共享鎖的操作是可以併發執行的
但是觸發互斥鎖,那麼該表和該分區就不能併發的執行作業了。

於是開始嘗試解鎖:

unlock table 表名;

但是給我報錯了:

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. 
Current transaction manager does not support explicit lock requests.  Transaction manager:   
org.apache.hadoop.hive.ql.lockmgr.DbTxnManager

但是再次使用 show locks;發現之前的鎖沒了

之前遇到怎麼都刪不掉的情況,解決辦法是執行:

set hive.support.concurrency=false;

這個是hive的鎖機制,可以暫時關掉,默認是true。關掉之後就可以刪除表了,刪掉之後可以再把它設置爲true。但是會有遺留問題,我們會發現那個鎖依舊沒掉!
這時候需要去執行

set hive.txn.manager = org.apache.hadoop.hive.ql.lockmgr.DummyTxnManager;

然後再去unlock那個鎖!

如果還!是!不!行!

直接去mysql元數據執行:

select * from HIVE_LOCKS;

查到所有的鎖,然後選擇幹掉

DELETE FROM hive_locks where ...
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章