Hive鎖表的問題

2021-10-01 10:16:21 字數 1256 閱讀 7224

旁邊的實習生一副很無奈的表情:集群又出現問題了,hive一直卡住不能用。我看了一下他執行的hivesql,發現他想查詢我正在往hive中導資料的表,這個時候hive由於鎖的問題,是無法查詢的,那麼資料庫的鎖究竟是什麼東東呢?

詳情參考

鎖主要是為了保證資料的完整性和一致性

詳細請看官網

hive存在兩種鎖,共享鎖 shared (s)和互斥鎖 exclusive (x),

其中只觸發s鎖的操作可以併發的執行,只要有乙個操作對錶或者分割槽出發了x鎖,則該錶或者分割槽不能併發的執行作業。

各個操作鎖出發的鎖如下:

補充一條,load data (local) inpath 』 』 into table xx partition() 出發的鎖操作同insert

直接在hadoop上 hadoop dfs -put xx yy 不觸發鎖。(可以用在shell上 執行 hadoop dfs -put file hdfsmulu 這兩天命令來代替 load data,避免鎖)

load data 時若分割槽不存在會建立分割槽,而hadoop dfs -put不會, 需先呼叫alter table add partition來建立分割槽。 若乙個操作正在讀取表中資料,這時向表的分割槽中put資料,該資料在本次讀時不會被載入,下次讀操作時才會被載入。

查詢是否鎖表

hive> show locks;

okods@tablea exclusive

發現ods庫下的tablea表被鎖

臨時解決辦法

unlock table ods.tablea;
unlock table test partition(date='2019-12-12'); //解鎖分割槽鎖命令可以用這個
關閉鎖機制

set hive.support.concurrency=false; // 預設為true
當然用set命令,只要斷開和hive的連線,下次則失效

永久關閉鎖機制

在hive-site.xml檔案中追加:

set hive.txn.manager

org.apache.hadoop.hive.ql.lockmgr.dummytxnmanager

hive鎖表操作

當hive表被鎖住後,進行drop insert操作時都出掛起等待,sqoop也無法匯入資料,此時就需要先對hive表解鎖再進行相關操作。步驟如下 檢視是否被鎖 show locks t real user comein 解決辦法 關閉鎖機制 set hive.support.concurrency...

hive鎖表操作

當hive表被鎖住後,進行drop insert操作時都出掛起等待,sqoop也無法匯入資料,此時就需要先對hive表解鎖再進行相關操作。1.檢視是否鎖表 show locks show locks extended show locks partition show locks partition...

oracle表鎖問題

系統症狀使用者新增資料無法新增,日誌正常輸出,sql指令碼直接在資料庫執行,等待。判斷可能是開發操作表後沒有commit 通過alter system kill session命令結束程序 alter system kill session 6976,33967 查詢鎖物件 select alter...