HBase WAL機制

前面兩篇文章分別講解了 HBase 原理的 Region 定位和 HBase 原理的數據存儲與讀取,本文將講解 HBase 原理的 WAL 機制。


在分佈式環境下,用戶必須要考慮系統出錯的情形,例如,Region服務器發生故障時, MemStore 緩存中還沒有被寫入文件的數據會全部丟失。因此,HBase 採用 HLog 來保證系統發生故障時能夠恢復到正常的狀態。

HBase WAL機制

如上圖所示,每個 Region 服務器都有一個 HLog 文件,同一個 Region 服務器的 Region 對象共用一個 HLog,HLog 是一種預寫日誌(Write Ahead Log)文件。
也就是說,用戶更新數據必須先被記入日誌後才能寫入 MemStore 緩存,當緩存內容對應的日誌已經被寫入磁盤後,即日誌寫成功後,緩存的內容才會被寫入磁盤。
ZooKeeper 會實時監測每個 Region 服務器的狀態,當某個 Region 服務器發生故障時,ZooKeeper 會通知 Master,Master 首先會處理該故障 Region 服務器上遺留的 HLog 文件。
由於一個 Region 服務器上可能會維護著多個 Region 對象,這些 Region 對象共用一個 HLog 文件,因此這個遺留的 HLog 文件中包含了來自多個 Region 對象的日誌記錄。
系統會根據每條日誌記錄所屬的 Region 對象對 HLog 數據進行拆分,並分別存放到相應 Region 對象的目錄下。再將失效的 Region 重新分配到可用的 Region 服務器中,並在可用的 Region 服務器中重新進行日誌記錄中的各種操作, 把日誌記錄中的數據寫入 MemStore 然後刷新到磁盤的 StoreFile 文件中,完成數據恢復。
在 HBase 系統中每個 Region 服務器只需要一個 HLog 文件,所有 Region 對象共用一個 HLog,而不是每個 Region 使用一個 HLog。在這種 Region 對象共用一個 HLog 的方式中,多個 Region 對象在進行更新操作需要修改日誌時,只需要不斷地把日誌記錄追加到單個日誌文件中,而不需要同時打開、寫入多個日誌文件中,因此可以減少磁盤尋址次數,提高對錶的寫操作性能。


分享到:


相關文章: