HBase 部分表無法寫入數據的異常處理

HBase 無法寫入數據到某張表,服務狀態均正常,並且可能只是某一張表或者部分表發生無法寫入問題,那麼此時可能是某一個或幾個 RegionServer 出了問題,使其狀態變更爲 PENDING_CLOSE,從而無法寫入數據,但是它們的服務狀態可能仍然顯示爲正常。

注:這其中的一種可能的情況,不能證明所有的無法寫入的問題均來自於此。

1. 檢查 Regions in Transition

cloudera manager爲例

登錄cloudera manager -> HBase -> Master -> Master (活動) -> HBase WEB UI, 進入Master-status頁面。

往下拉,找到Regions in Transition節點(正常則沒有),如果看到如下信息(server 信息已被屏蔽):

Regions in Transition

那麼說明有一個 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節點,可以看到如下信息:

Task

這是在完成第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. 完成

嘗試重新寫入數據,一切正常。

6. 參考資料

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