帶你瞭解 HBase 資料模型和 HBase 架構

​此賬號為華為雲開發者社群官方運營賬號,提供全面深入的雲計算前景分析、豐富的技術乾貨、程式樣例,分享華為雲前沿資訊動態

本文分享自華為雲社群《HBase 架構:HBase資料模型& HBase 讀/寫機制》,作者: Donglian Lin 。

HBase 架構:HBase 資料模型

眾所周知,HBase 是一個面向列的 NoSQL 資料庫。雖然它看起來類似於包含行和列的關係資料庫,但它不是關係資料庫。關係資料庫是面向行的,而 HBase 是面向列的。那麼,讓我們首先了解面向列和麵向行的資料庫之間的區別:

面向行與面向列的資料庫:

面向行的資料庫以行的順序儲存表記錄。而面向列的資料庫 將表記錄儲存在一系列列中,即列中的條目儲存在磁碟上的連續位置。

為了更好地理解它,讓我們舉個例子並考慮下表。

帶你瞭解 HBase 資料模型和 HBase 架構

如果此表儲存在面向行的資料庫中。它將儲存如下所示的記錄:

1 ,保羅沃克,美國, 231 ,加拉多,

2, Vin Diesel ,巴西, 520 , Mustang

如上所示,在面向行的資料庫中,資料是基於行或元組儲存的。

雖然面向列的資料庫將此資料儲存為:

1 , 2 , Paul Walker , VinDiesel , 美國,巴西, 231 , 520 , Gallardo , Mustang

在面向列的資料庫中,所有列值都儲存在一起,就像第一列值將儲存在一起,然後第二列值將一起儲存,其他列中的資料以類似方式儲存。

當資料量非常大時,比如 PB 級或 EB 級,我們使用面向列的方法,因為單列的資料儲存在一起,可以更快地訪問。

雖然面向行的方法相對有效地處理較少數量的行和列,但面向行的資料庫儲存資料是一種結構化格式。

當我們需要處理和分析大量半結構化或非結構化資料時,我們使用面向列的方法。例如處理

線上分析處理的

應用程式,如資料探勘、資料倉庫、包括分析在內的應用程式等。

線上事務處理(

例如處理結構化資料並需要事務屬性(ACID 屬性)的銀行和金融領域)使用面向行的方法。

HBase 表具有以下元件,如下圖所示:

帶你瞭解 HBase 資料模型和 HBase 架構

表格

:資料以表格格式儲存在HBase 中。但這裡的表格是面向列的格式。

:行鍵用於搜尋記錄,使搜尋速度更快。你會很想知道怎麼做嗎?我將在本部落格的架構部分進行解釋。

:各種列組合在一個列族中。這些列族儲存在一起,這使得搜尋過程更快,因為可以在一次查詢中一起訪問屬於同一列族的資料。

限定符

:每列的名稱稱為其列限定符。

單元格

:資料儲存在單元格中。資料被轉儲到由行鍵和列限定符專門標識的單元格中。

時間戳

:時間戳是日期和時間的組合。無論何時儲存資料,它都會與其時間戳一起儲存。這使得搜尋特定版本的資料變得容易。

用更簡單易懂的方式,我們可以說 HBase 包括:

一組表

每個表都有列族和行

行鍵在 HBase 中充當主鍵。

對 HBase 表的任何訪問都使用此主鍵

HBase 中存在的每個列限定符表示與駐留在單元格中的物件相對應的屬性。

現在您瞭解了 HBase 資料模型,讓我們看看這個資料模型如何符合 HBase 架構並使其適用於大儲存和更快的處理。

HBase 架構:HBase 架構的元件

HBase 具有三個主要元件,即

HMaster Server

HBase Region Server、Regions

Zookeeper

下圖解釋了 HBase 架構的層次結構。我們將單獨討論它們中的每一個。

帶你瞭解 HBase 資料模型和 HBase 架構

現在在進入HMaster 之前,我們將瞭解 Region,因為所有這些 Server(HMaster、RegionServer、Zookeeper)都是用來協調和管理 Region 並在Region 內部執行各種操作的。因此,您很想知道什麼是區域以及它們為何如此重要?

HBase 架構:區域

一個區域包含分配給該區域的開始鍵和結束鍵之間的所有行。HBase表可以劃分為多個區域,將一個列族的所有列儲存在一個區域中。每個區域都包含按排序順序的行。

許多區域被分配給一個

Region Server

,它負責處理、管理、執行對該組區域的讀取和寫入操作。

所以,以更簡單的方式結束:

一個表可以分為多個區域。區域是儲存在開始鍵和結束鍵之間的資料的有序行範圍。

一個 Region 的預設大小為 256MB,可以根據需要進行配置。

區域伺服器為客戶端提供一組區域。

一個區域伺服器可以為客戶端提供大約 1000 個區域。

現在從層次結構的頂部開始,我首先想向您解釋 HMaster Server,它的作用類似於

HDFS 中

的 NameNode 。然後,在層次結構中向下移動,我將帶您瞭解 ZooKeeper 和 Region Server。

HBase 架構:HMaster

如下圖所示,您可以看到 HMaster 處理駐留在 DataNode 上的Region Server 集合。讓我們瞭解 HMaster 是如何做到這一點的。

帶你瞭解 HBase 資料模型和 HBase 架構

HBase HMaster 執行 DDL 操作(建立和刪除表)並將區域分配給區域伺服器,如上圖所示。

它協調和管理 Region Server(類似於 NameNode 在 HDFS 中管理 DataNode)。

它在啟動時將區域分配給區域伺服器,並在恢復和負載平衡期間將區域重新分配給區域伺服器。

它監視叢集中所有 Region Server 的例項(在 Zookeeper 的幫助下),並在任何 Region Server 關閉時執行恢復活動。

它提供了一個用於建立、刪除和更新表的介面。

HBase 有一個龐大的分散式環境,僅靠 HMaster 不足以管理所有內容。那麼,你會想知道是什麼幫助 HMaster 管理這個巨大的環境?這就是 ZooKeeper 出現的地方。在瞭解了 HMaster 如何管理HBase 環境後,我們將瞭解 Zookeeper 如何幫助 HMaster 管理環境。

HBase 架構:ZooKeeper – 協調器

下圖解釋了 ZooKeeper 的協調機制。

帶你瞭解 HBase 資料模型和 HBase 架構

Zookeeper 就像 HBase 分散式環境中的協調器。它有助於透過會話進行通訊來維護叢集內的伺服器狀態。

每個 Region Server 和 HMaster Server 都會定期向 Zookeeper 傳送連續的心跳,並檢查哪個伺服器是活動的和可用的,如上圖所示。它還提供伺服器故障通知,以便可以執行恢復措施。

從上圖可以看出,有一個不活動的伺服器,它作為活動伺服器的備份。如果活動伺服器出現故障,它就會派上用場。

活動的 HMaster 向 Zookeeper 傳送心跳,而非活動的 HMaster 偵聽活動 HMaster 傳送的通知。如果活動 HMaster 未能傳送心跳,則會話將被刪除,非活動 HMaster 變為活動狀態。

而如果 Region Server 無法傳送心跳,則會話將過期並通知所有偵聽器。然後 HMaster 執行適當的恢復操作,我們將在本部落格稍後討論。

Zookeeper 還維護 。META Server 的路徑,這有助於任何客戶端搜尋任何區域。Client首先必須與。META Server核對某個區域所屬的Region Server,並獲取該Region Server的路徑。

說到。META Server,我先給大家解釋一下什麼是。META Server?因此,您可以輕鬆地將 ZooKeeper 和 。META Server 的工作聯絡在一起。稍後,當我在此部落格中向您解釋 HBase 搜尋機制時,我將解釋這兩者如何協同工作。

HBase 架構: 元表

帶你瞭解 HBase 資料模型和 HBase 架構

META 表是一個特殊的HBase 目錄表。它維護了 HBase 儲存系統中所有區域伺服器的列表,如上圖所示。

從圖中可以看到,

.META

檔案以鍵和值的形式維護表。Key 代表區域的起始鍵和它的 id,而值包含區域伺服器的路徑。

正如我在向您解釋 Region 時已經討論過的 Region Server 及其功能,因此現在我們正在向下移動層次結構,我將專注於 Region Server 的元件及其功能。稍後我將討論搜尋、閱讀、寫作的機制,並瞭解所有這些元件如何協同工作。

HBase 架構: Region Server 的元件

下圖顯示了區域伺服器的元件。現在,我將分別討論它們。

帶你瞭解 HBase 資料模型和 HBase 架構

區域伺服器維護在

HDFS

頂部執行的各種區域。區域伺服器的元件是:

WAL:

從上圖中可以得出結論,WriteAhead Log (WAL) 是附加到分散式環境中每個 Region Server 的檔案。WAL 儲存尚未持久化或提交到永久儲存的新資料。它用於恢復資料集失敗的情況。

BlockCache:

從上圖可以清楚的看到BlockCache位於Region Server的頂部。它將經常讀取的資料儲存在記憶體中。如果 BlockCache 中的資料最近最少使用,則該資料將從 BlockCache 中刪除。

MemStore:

是寫快取。在將所有傳入資料提交到磁碟或永久記憶體之前,它會儲存所有傳入資料。一個區域中的每個列族都有一個 MemStore。正如您在影象中看到的,一個區域有多個 MemStore,因為每個區域包含多個列族。資料在提交到磁碟之前按字典順序排序。

HFile:

從上圖可以看出HFile是儲存在HDFS上的。因此,它將實際單元儲存在磁碟上。當 MemStore 的大小超過時,MemStore 將資料提交到 HFile。

現在我們知道了 HBase 架構的主要和次要元件,我將在此解釋機制和他們的協作努力。不管是讀還是寫,首先我們要搜尋從哪裡讀或者從哪裡寫一個檔案。所以,讓我們瞭解這個搜尋過程,因為這是使 HBase 非常流行的機制之一。

HBase 架構: 搜尋如何在 HBase 中初始化?

如您所知,Zookeeper 儲存 META 表位置。每當客戶端向 HBase 發出讀取或寫入請求時,就會發生以下操作:

1。 客戶端從 ZooKeeper 檢索 META 表的位置。

2。 客戶端然後從 META 表中請求相應行鍵的Region Server 的位置來訪問它。客戶端將此資訊與 META 表的位置一起快取。

3。 然後它將透過從相應的Region Server 請求來獲取行位置。

對於將來的引用,客戶端使用其快取來檢索 META 表的位置和先前讀取的行鍵的區域伺服器。然後客戶端將不會引用META 表,直到並且除非由於區域移動或移動而導致未命中。然後它將再次請求 META 伺服器並更新快取。

與每次一樣,客戶端不會浪費時間從 META 伺服器檢索 Region Server 的位置,因此,這節省了時間並使搜尋過程更快。現在,讓我告訴您如何在 HBase 中進行寫入。其中涉及哪些元件以及它們如何參與?

HBase 架構: HBase 寫機制

下圖解釋了 HBase 中的寫入機制。

帶你瞭解 HBase 資料模型和 HBase 架構

寫入機制依次經過以下過程(參考上圖):

步驟1:每當客戶端有寫請求時,客戶端將資料寫入WAL(Write Ahead Log)。

然後將編輯附加到 WAL 檔案的末尾。

該 WAL 檔案儲存在每個 Region Server 中,Region Server 使用它來恢復未提交到磁碟的資料。

第 2 步:將資料寫入 WAL 後,將其複製到 MemStore。

第 3 步:一旦資料放入 MemStore,客戶端就會收到確認。

第 4 步:當 MemStore 達到閾值時,它將資料轉儲或提交到 HFile。

現在讓我們深入瞭解一下 MemStore 在寫作過程中的貢獻以及它的功能是什麼?

HBase 寫機制- MemStore

MemStore 總是按照字典順序(按字典方式)將儲存在其中的資料更新為已排序的 KeyValue。每個列族有一個 MemStore,因此每個列族的更新以排序的方式儲存。

當 MemStore 達到閾值時,它會以排序的方式將所有資料轉儲到一個新的 HFile 中。此 HFile 儲存在 HDFS 中。HBase 為每個列族包含多個 HFile。

隨著時間的推移,HFile 的數量隨著 MemStore 轉儲資料而增長。

MemStore 還儲存了最後寫入的序列號,因此 Master Server 和 MemStore 都知道到目前為止提交了什麼以及從哪裡開始。當區域啟動時,讀取最後一個序列號,並從該編號開始新的編輯。

正如我多次討論過的,HFile 是 HBase 架構中的主要持久儲存。最後,所有的資料都提交到 HFile 中,HFile是 HBase 的永久儲存。因此,讓我們看看 HFile 的屬性,它可以在讀寫時更快地進行搜尋。

HBase 架構: HBase 寫入機制- HFile

寫入按順序放置在磁碟上。因此,磁碟讀寫頭的運動非常少。這使得寫入和搜尋機制非常快。

每當開啟 HFile 時,HFile 索引就會載入到記憶體中。這有助於在單次查詢中查詢記錄。

預告片是一個指向 HFile 的元塊的指標。它寫在提交檔案的末尾。它包含有關時間戳和布隆過濾器的資訊。

布隆過濾器有助於搜尋鍵值對,它會跳過不包含所需行鍵的檔案。時間戳還有助於搜尋檔案的版本,它有助於跳過資料。

在瞭解寫入機制和各種元件在使寫入和搜尋更快方面的作用之後。我將向您解釋讀取機制在HBase 架構中是如何工作的?然後我們將轉向提高HBase 效能的機制,如壓縮、區域拆分和恢復。

HBase 架構: 讀取機制

正如我們在搜尋機制中所討論的,如果客戶端的快取中沒有它,客戶端首先從。META 伺服器中檢索區域伺服器的位置。然後它按順序執行以下步驟:

為了讀取資料,掃描器首先在塊快取中查詢行單元。這裡儲存了所有最近讀取的鍵值對。

如果 Scanner 未能找到所需的結果,它會移動到 MemStore,因為我們知道這是寫快取記憶體。在那裡,它搜尋最近寫入的檔案,這些檔案尚未轉儲到 HFile 中。

最後,它將使用布隆過濾器和塊快取從 HFile 載入資料。

到目前為止,我已經討論了 HBase 的搜尋、讀寫機制。現在我們來看看 HBase 機制,它使HBase 中的搜尋、讀取和寫入變得快速。首先,我們將瞭解Compaction,這是其中一種機制。

HBase 架構: 壓縮

帶你瞭解 HBase 資料模型和 HBase 架構

HBase

結合HFiles 以減少儲存並減少讀取所需的磁碟尋道次數。這個過程稱為

壓縮

。Compaction 從一個區域中選擇一些 HFile 並將它們組合起來。如上圖所示,有兩種型別的壓縮。

1。

次要壓縮

:HBase 自動選擇較小的 HFile 並將它們重新提交到較大的 HFile,如上圖所示。這稱為輕微壓實。它執行合併排序以將較小的 HFile 提交到較大的 HFile。這有助於最佳化儲存空間。

2。

Major Compaction:

如上圖所示,在Major compaction中,HBase將一個區域的較小的HFiles合併並重新提交到一個新的HFile。在這個過程中,相同的列族被放置在新的 HFile 中。它會在此過程中刪除已刪除和過期的單元格。它提高了讀取效能。

但在此過程中,輸入輸出磁碟和網路流量可能會變得擁擠。這稱為

寫放大

。因此,它通常安排在低峰值負載時間。

現在我將討論的另一個性能最佳化過程是 Region Split。這對於負載平衡非常重要。

HBase 架構: 區域拆分

下圖說明了 Region Split 機制。

帶你瞭解 HBase 資料模型和 HBase 架構

每當一個區域變大時,它就會被分成兩個子區域,如上圖所示。每個區域正好代表父區域的一半。然後將此拆分報告給 HMaster。這由同一個Region Server 處理,直到 HMaster 將它們分配給新的 Region Server 以進行負載平衡。

接下來,最後但並非最不重要的一點是,我將向您解釋HBase 如何在發生故障後恢復資料。我們知道

故障恢復

是 HBase 的一個非常重要的特性,因此讓我們瞭解 HBase 如何在故障後恢復資料。

HBase 架構:HBase 崩潰和資料恢復

每當 Region Server 出現故障時,ZooKeeper 都會通知 HMaster 故障。

然後 HMaster 將崩潰的 Region Server 的區域分發並分配給許多活動的 Region Server。為了恢復出現故障的 Region Server 的 MemStore 的資料,HMaster 將 WAL 分發給所有 Region Server。

每個 Region Server 重新執行 WAL 來為那個失敗的 region 的列族構建 MemStore。

資料按時間順序(按時間順序)寫入 WAL。因此,重新執行該 WAL 意味著進行所有在 MemStore 檔案中所做和儲存的更改。

所以,在所有的 Region Servers 執行完 WAL 之後,所有列族的 MemStore 資料都被恢復了。

我希望這篇部落格能幫助您瞭解 HBase 資料模型和 HBase 架構。希望你喜歡它。

點選關注,第一時間瞭解華為雲新鮮技術~華為雲部落格_大資料部落格_AI部落格_雲計算部落格_開發者中心-華為雲