HBase資料的讀寫流程

shkstart發表於2022-01-14

HBase 的核心模組是 Region 伺服器。Region 伺服器由多個 Region 塊構成,Region 塊中儲存一系列連續的資料集。Region 伺服器主要構成部分是 HLog 和 Region 塊。HLog 記錄該 Region 的操作日誌。

Region 物件由多個 Store 組成,每個 Store 對應當前分割槽中的一個列族,每個 Store 管理一塊記憶體,即 MemStoreo 當 MemStore 中的資料達到一定條件時會寫入 StoreFile 檔案中,因此每個 Store 包含若干個 StoreFile 檔案。StoreFile 檔案對應 HDFS 中的 HFile 檔案。

HBase 群集資料的構成如圖所示。
在這裡插入圖片描述

MemStore
當 Region 伺服器收到寫請求的時候,Region 伺服器會將請求轉至相應的 Region。資料先被寫入 MemStore,當到達一定的閾值時,MemStore 中的資料會被重新整理到 HFile 中進行持久化儲存。

HBase 將最近接收到的資料快取在 MemStore 中,在持久化到 HDFS 之前完成排序,再順序寫入 HDFS,為後續資料的檢索進行最佳化。因為 MemStore 快取的是最近增加的資料,所以也提高了對近期資料的操作速度。

在持久化寫入之前, 大資料培訓在記憶體中對行鍵或單元格進行最佳化。例如,當資料的 version 被設為 1 時,對某些列族中的一些資料,MemStore 快取單元格的最新資料,在寫入 HFile 時,僅需要儲存一個最新的版本。
Store
Store 是 Region 伺服器的核心,儲存的是同一個列族下的資料,每個 Store 包含一塊 MemStore 和 StoreFile( 0 個或多個)。StoreFile 是 HBase 中最小的資料儲存單元。

資料寫入 MemStore 快取,當 MemStore 快取滿時,記憶體中的資料會持久化到磁碟中一個 StoreFile 檔案中,隨著 StoreFile 檔案數量的不斷增加,數量達到一個閾值後,就會促使檔案合併成一個大的 StoreFile 檔案。

由於 StoreFile 檔案的不斷合併,造成 StoreFile 檔案的大小超過一定的閾值,因此,會促使檔案進行分裂操作。同時,當前的一個父 Region 會被分成兩個子 Region, 父 Region 會下線,新分裂出的兩個子 Region 會被 Master 分配到相應的 Regio n伺服器上。

Store 的合併和分裂過程如下圖所示。
在這裡插入圖片描述

HFile
將 MemStore 記憶體中的資料寫入 StoreFile 檔案中,StoreFile 底層是以 HFile 格式儲存的。

HFile 的儲存格式如下圖所示。
在這裡插入圖片描述

HFile 檔案是不定長的,長度固定的只有其中的兩塊:Trailer 和 File Info。Trailer 中有指標指向其他資料塊的起始點,File Info 記錄了檔案的一些 Meta 資訊。每個 Data 塊的大小可以在建立一個 Table 的時候透過引數指定(預設塊大小為 64KB)。每個 Data 塊除了開頭的 Magic 以外就是由一個鍵值對拼接而成的,Magic 內容是一些隨機數字,用於防止資料損壞。

HFile 裡面的每個鍵值對就是一個簡單的 Byte 陣列。但是這個 Byte 陣列裡麵包含了很多項, 並且有固定的結構,其具體結構如圖所示。
在這裡插入圖片描述

鍵值對結構以兩個固定長度的數值開始,分別表示 Key 的長度和 Value 的長度。緊接著是 Key,Key 以 RowLength 開始,是固定長度的數值,表示 RowKey 的長度;接著是 Row,然後是固定長度的數值 ColumnFamilyLength,表示 Family 的長度;之後是 Family 列族,接著是 Qualifier 列識別符號,Key 最後以兩個固定長度的數值 Time Stamp 和 Key Type(Put/Delete) 結束。Value部分沒有這麼複雜的結構,就是純粹的二進位制資料。
HBase 資料寫入流程

  1. 客戶端訪問 ZooKeeper,從 Meta 表得到寫入資料對應的 Region 資訊和相應 的Region 伺服器。

  2. 客戶端訪問相應的 Region 伺服器,把資料分別寫入 HLog 和 MemStore。MemStore 資料容量有限,當達到一個閾值後,則把資料寫入磁碟檔案 StoreFile 中,在 HLog 檔案中寫入一個標記,表示 MemStore 快取中的資料已被寫入 StoreFile 中。如果 MemStore 中的資料丟失,則可以從 HLog 上恢復。

  3. 當多個 StoreFile 檔案達到閾值後,會觸發 Store.compact() 將多個 StoreFile 檔案合併為一個 大檔案。
    HBase 資料讀取流程

  4. 客戶端先訪問 ZooKeeper,從 Meta 表讀取 Region 資訊對應的伺服器。

  5. 客戶端向對應 Region 伺服器傳送讀取資料的請求,Region 接收請求後,先從 MemStore 查詢資料;如果沒有,再到 StoreFile 上讀取,然後將資料返回給客戶端。

版權宣告:本文為原創文章,轉載請附上原文出處連結及本宣告。下載相關影片學習資料到尚矽谷官方網站。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27721058/viewspace-2852235/,如需轉載,請註明出處,否則將追究法律責任。

相關文章