HBase 無法寫入數據到某張表,服務狀態均正常,並且可能只是某一張表或者部分表發生無法寫入問題,那麼此時可能是某一個或幾個 RegionServer 出了問題,使其狀態變更爲 PENDING_CLOSE
,從而無法寫入數據,但是它們的服務狀態可能仍然顯示爲正常。
注:這其中的一種可能的情況,不能證明所有的無法寫入的問題均來自於此。
1. 檢查 Regions in Transition
以
cloudera manager
爲例
登錄cloudera manager
-> HBase
-> Master
-> Master (活動)
-> HBase WEB UI
, 進入Master-status
頁面。
往下拉,找到Regions in Transition
節點(正常則沒有),如果看到如下信息(server 信息已被屏蔽):
那麼說明有一個 Region 處於 PENDING_CLOSE
狀態,如果不能寫入的表處於這個 Region 上,那麼則可能導致數據無法正常寫入(寫入的 key 處於這個 region)。
Region-In-Transition 說的是 Region 變遷機制,實際上是指在一次特定操作行爲中 Region 狀態的變遷,其狀態包括:OPEN -> PENDING_CLOSE -> CLOSING -> CLOSED。
摘抄於 http://hbasefly.com/2016/09/08/hbase-rit/,更多 Region-In-Trasition 相關內容請閱讀原文。
2. 重啓 Region
解決的最簡單的辦法就是重啓了,畢竟網管大法好。
依次進入cloudera manager
-> HBase
-> RegionServer
,在右側的列表中找到出問題的 RegionServer(主機名與上圖中 server 相等),點擊 RegionServer
進入 Region 管理頁面,然後重啓該 Region(因涉及到公司服務器相關信息,所以就不放截圖了)。
3. RegionServer 檢查
按照第1步再次進入Master-status
頁面,往下拉,找到Tasks
節點,可以看到如下信息:
這是在完成第2步重啓 Region 後的任務信息,繼續下拉,發現無法找到 Regions in Transition
節點(這裏僅有一個 RegionServer 除了問題,所以正常後便消失了),此時說明 RegionServer 恢復正常。
4. 數據一致性檢查
Resion 發生問題後,最擔心的莫過於數據是否仍然保持一致性,此時可登錄對應集羣的任一服務器,輸入如下命令:
sudo -u hbase hbase hbck
輸出末尾信息如下(server 名稱被屏蔽):
··· 省略
Deployed on: xxxx05.xxxx.xxxx,60020,1493260775900
Table dba_test is okay.
Number of regions: 5
Deployed on: xxxx04.xxxx.xxxx,60020,1493260776802 xxxx05.xxxx.xxxx,60020,1493260776083 xxxx06.xxxx.xxxx,60020,1493260776047 xxxx08.xxxx.xxxx,60020,1493260776278
0 inconsistencies detected.
從最後一行的輸出可看到,沒有存在數據不一致的情況。
5. 完成
嘗試重新寫入數據,一切正常。