大數據“復活”記
634
2025-03-31
HBase 架構
在我之前關于HBase 教程的博客中,我解釋了什么是 HBase 及其特性。我還提到了 Facebook Messenger 的案例研究,以幫助您更好地聯系。現在繼續,我將解釋 HBase 和 HBase 架構的數據模型。在繼續之前,您還應該知道 HBase 是一個重要的概念,它構成了大數據 Hadoop 認證課程的一個組成部分。
我將在此 HBase 架構博客中向您介紹的重要主題是:
HBase 數據模型
HBase 架構及其組件
HBase 寫機制
HBase 讀機制
HBase 性能優化機制
我們先來了解一下HBase的數據模型。它有助于 HBase 更快地讀/寫和搜索。
HBase 架構:HBase 數據模型
眾所周知,HBase 是一個面向列的 NoSQL 數據庫。雖然它看起來類似于包含行和列的關系數據庫,但它不是關系數據庫。關系數據庫是面向行的,而 HBase 是面向列的。那么,讓我們首先了解面向列和面向行的數據庫之間的區別:
面向行與面向列的數據庫:
面向行的數據庫以行的順序存儲表記錄。而面向列的數據庫?將表記錄存儲在一系列列中,即列中的條目存儲在磁盤上的連續位置。
為了更好地理解它,讓我們舉個例子并考慮下表。
如果此表存儲在面向行的數據庫中。它將存儲如下所示的記錄:
1?,保羅沃克,美國,?231?,加拉多,
2,??Vin Diesel?,巴西,?520?,?Mustang
如上所示,在面向行的數據庫中,數據是基于行或元組存儲的。
雖然面向列的數據庫將此數據存儲為:
1?,?2?,??Paul Walker?,?Vin Diesel?,?美國,巴西,??231?,?520?,??Gallardo?,?Mustang
在面向列的數據庫中,所有列值都存儲在一起,就像第一列值將存儲在一起,然后第二列值將一起存儲,其他列中的數據以類似方式存儲。
當數據量非常大時,比如 PB 級或 EB 級,我們使用面向列的方法,因為單列的數據存儲在一起,可以更快地訪問。
雖然面向行的方法相對有效地處理較少數量的行和列,但面向行的數據庫存儲數據是一種結構化格式。
當我們需要處理和分析大量半結構化或非結構化數據時,我們使用面向列的方法。例如處理在線分析處理的應用程序,如數據挖掘、數據倉庫、包括分析在內的應用程序等。
而在線事務處理(例如處理結構化數據并需要事務屬性(ACID 屬性)的銀行和金融領域)使用面向行的方法。
HBase 表具有以下組件,如下圖所示:
表格:數據以表格格式存儲在 HBase 中。但這里的表格是面向列的格式。
行?鍵:行鍵用于搜索記錄,使搜索速度更快。你會很想知道怎么做嗎?我將在本博客的架構部分進行解釋。
列?族:各種列組合在一個列族中。這些列族存儲在一起,這使得搜索過程更快,因為可以在一次查找中一起訪問屬于同一列族的數據。
列?限定符:每列的名稱稱為其列限定符。
單元格:數據存儲在單元格中。數據被轉儲到由行鍵和列限定符專門標識的單元格中。
時間戳:時間戳是日期和時間的組合。無論何時存儲數據,它都會與其時間戳一起存儲。這使得搜索特定版本的數據變得容易。
用更簡單易懂的方式,我們可以說 HBase 包括:
一組表
每個表都有列族和行
行鍵在 HBase 中充當主鍵。
對 HBase 表的任何訪問都使用此主鍵
HBase 中存在的每個列限定符表示與駐留在單元格中的對象相對應的屬性。
現在您了解了 HBase 數據模型,讓我們看看這個數據模型如何符合 HBase 架構并使其適用于大存儲和更快的處理。
HBase 架構:HBase 架構的組件
HBase 具有三個主要組件,即HMaster Server、HBase Region Server、Regions和Zookeeper。
下圖解釋了 HBase 架構的層次結構。我們將單獨討論它們中的每一個。
現在在進入 HMaster 之前,我們將了解 Region,因為所有這些 Server(HMaster、Region Server、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 HMaster 執行 DDL 操作(創建和刪除表)并將區域分配給區域服務器,如上圖所示。
它協調和管理 Region Server(類似于 NameNode 在 HDFS 中管理 DataNode)。
它在啟動時將區域分配給區域服務器,并在恢復和負載平衡期間將區域重新分配給區域服務器。
它監視集群中所有 Region Server 的實例(在 Zookeeper 的幫助下),并在任何 Region Server 關閉時執行恢復活動。
它提供了一個用于創建、刪除和更新表的接口。
HBase 有一個龐大的分布式環境,僅靠 HMaster 不足以管理所有內容。那么,你會想知道是什么幫助 HMaster 管理這個巨大的環境?這就是 ZooKeeper 出現的地方。在了解了 HMaster 如何管理 HBase 環境后,我們將了解 Zookeeper 如何幫助 HMaster 管理環境。
HBase 架構:ZooKeeper – 協調器
下圖解釋了 ZooKeeper 的協調機制。
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 架構:?元表
META 表是一個特殊的 HBase 目錄表。它維護了?HBase 存儲系統中所有區域服務器的列表,如上圖所示。
從圖中可以看到,.META文件以鍵和值的形式維護表。Key 代表區域的起始鍵和它的 id,而值包含區域服務器的路徑。
正如我在向您解釋 Region 時已經討論過的 Region Server 及其功能,因此現在我們正在向下移動層次結構,我將專注于 Region Server 的組件及其功能。稍后我將討論搜索、閱讀、寫作的機制,并了解所有這些組件如何協同工作。
HBase 架構:?Region Server 的組件
下圖顯示了區域服務器的組件。現在,我將分別討論它們。
區域服務器維護在HDFS頂部運行的各種區域。區域服務器的組件是:
WAL:?從上圖中可以得出結論,Write Ahead Log (WAL) 是附加到分布式環境中每個 Region Server 的文件。WAL 存儲尚未持久化或提交到永久存儲的新數據。它用于恢復數據集失敗的情況。
Block Cache:從上圖可以清楚的看到Block Cache位于Region Server的頂部。它將經常讀取的數據存儲在內存中。如果 BlockCache 中的數據最近最少使用,則該數據將從 BlockCache 中刪除。
MemStore:是寫緩存。在將所有傳入數據提交到磁盤或永久內存之前,它會存儲所有傳入數據。一個區域中的每個列族都有一個 MemStore。正如您在圖像中看到的,一個區域有多個 MemStore,因為每個區域包含多個列族。數據在提交到磁盤之前按字典順序排序。
HFile:從上圖可以看出HFile是存儲在HDFS上的。因此,它將實際單元存儲在磁盤上。當 MemStore 的大小超過時,MemStore 將數據提交到 HFile。
現在我們知道了 HBase 架構的主要和次要組件,我將在此解釋機制和他們的協作努力。不管是讀還是寫,首先我們要搜索從哪里讀或者從哪里寫一個文件。所以,讓我們了解這個搜索過程,因為這是使 HBase 非常流行的機制之一。
HBase 架構:?搜索如何在 HBase 中初始化?
如您所知,Zookeeper 存儲 META 表位置。每當客戶端向 HBase 發出讀取或寫入請求時,就會發生以下操作:
客戶端從 ZooKeeper 檢索 META 表的位置。
客戶端然后從 META 表中請求相應行鍵的 Region Server 的位置來訪問它。客戶端將此信息與 META 表的位置一起緩存。
然后它將通過從相應的 Region Server 請求來獲取行位置。
對于將來的引用,客戶端使用其緩存來檢索 META 表的位置和先前讀取的行鍵的區域服務器。然后客戶端將不會引用 META 表,直到并且除非由于區域移動或移動而導致未命中。然后它將再次請求 META 服務器并更新緩存。
與每次一樣,客戶端不會浪費時間從 META 服務器檢索 Region Server 的位置,因此,這節省了時間并使搜索過程更快。現在,讓我告訴您如何在 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?結合 HFiles 以減少存儲并減少讀取所需的磁盤尋道次數。這個過程稱為壓縮。Compaction 從一個區域中選擇一些 HFile 并將它們組合起來。如上圖所示,有兩種類型的壓縮。
次要壓縮:HBase 自動選擇較小的 HFile 并將它們重新提交到較大的 HFile,如上圖所示。這稱為輕微壓實。它執行合并排序以將較小的 HFile 提交到較大的 HFile。這有助于優化存儲空間。
Major Compaction:?如上圖所示,在Major compaction中,HBase將一個區域的較小的HFiles合并并重新提交到一個新的HFile。在這個過程中,相同的列族被放置在新的 HFile 中。它會在此過程中刪除已刪除和過期的單元格。它提高了讀取性能。
但在此過程中,輸入輸出磁盤和網絡流量可能會變得擁擠。這稱為寫放大。因此,它通常安排在低峰值負載時間。
現在我將討論的另一個性能優化過程是?Region Split。這對于負載平衡非常重要。
HBase 架構:?區域拆分
下圖說明了 Region Split 機制。
每當一個區域變大時,它就會被分成兩個子區域,如上圖所示。每個區域正好代表父區域的一半。然后將此拆分報告給 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 架構。希望你喜歡它。現在,您可以將 HBase 的特性(我在之前的HBase 教程博客中解釋過)與 HBase 架構聯系起來,并了解它的內部工作原理。現在您已經了解了 HBase 的理論部分,您應該轉向實踐部分。記住這一點,我們的下一篇Hadoop 教程系列博客將解釋一個示例HBase POC。
HBase 數據庫
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。