hi,大家好,我是大D。今天咱們繼續深挖一下 HBase 的架構組成。 Hbase 作為 NoSQL 資料庫的代表,屬於三駕馬車之一 BigTable 的對應實現,HBase 的出現很好地彌補了大數據快速查詢能力的空缺。在前面咱們也有介紹過 HBase 的數據模型,感興趣的小伙伴可以翻看下。談談你對 ...
hi,大家好,我是大D。今天咱們繼續深挖一下 HBase 的架構組成。
Hbase 作為 NoSQL 資料庫的代表,屬於三駕馬車之一 BigTable 的對應實現,HBase 的出現很好地彌補了大數據快速查詢能力的空缺。在前面咱們也有介紹過 HBase 的數據模型,感興趣的小伙伴可以翻看下。談談你對HBase數據模型的認識?
HBase 的核心架構由五部分組成,分別是 HBase Client、HMaster、Region Server、ZooKeeper 以及 HDFS。它的架構組成如下圖所示。
下麵我們對 HBase 架構組成的每一部分詳細介紹一下。
1.HBase Client
HBase Client 為用戶提供了訪問 HBase 的介面,可以通過元數據表來定位到目標數據的 RegionServer,另外 HBase Client 還維護了對應的 cache 來加速 Hbase 的訪問,比如緩存元數據的信息。
2.HMaster
HMaster 是 HBase 集群的主節點,負責整個集群的管理工作,主要工作職責如下:
- 分配Region:負責啟動的時候分配Region到具體的 RegionServer;
- 負載均衡:一方面負責將用戶的數據均衡地分佈在各個 Region Server 上,防止Region Server數據傾斜過載。另一方面負責將用戶的請求均衡地分佈在各個 Region Server 上,防止Region Server 請求過熱;
- 維護數據:發現失效的 Region,並將失效的 Region 分配到正常的 RegionServer 上,並且在Region Sever 失效的時候,協調對應的HLog進行任務的拆分。
3.Region Server
Region Server 直接對接用戶的讀寫請求,是真正的幹活的節點,主要工作職責如下。
- 管理 HMaster 為其分配的 Region;
- 負責與底層的 HDFS 交互,存儲數據到 HDFS;
- 負責 Region 變大以後的拆分以及 StoreFile 的合併工作。
與 HMaster 的協同:當某個 RegionServer 宕機之後,ZK 會通知 Master 進行失效備援。下線的 RegionServer 所負責的 Region 暫時停止對外提供服務,Master 會將該 RegionServer 所負責的 Region 轉移到其他 RegionServer 上,並且會對所下線的 RegionServer 上存在 MemStore 中還未持久化到磁碟中的數據由 WAL 重播進行恢復。
下麵給大家詳細介紹下 Region Serve數據存儲的基本結構,如下圖所示。一個 Region Server 是包含多個 Region 的,這裡僅展示一個。
-
Region:每一個 Region 都有起始 RowKey 和結束 RowKey,代表了存儲的Row的範圍,保存著表中某段連續的數據。一開始每個表都只有一個 Region,隨著數據量不斷增加,當 Region 大小達到一個閥值時,Region 就會被 Regio Server 水平切分成兩個新的 Region。當 Region 很多時,HMaster 會將 Region 保存到其他 Region Server 上。
-
Store:一個 Region 由多個 Store 組成,每個 Store 都對應一個 Column Family, Store 包含 MemStore 和 StoreFile。
- MemStore:作為HBase的記憶體數據存儲,數據的寫操作會先寫到 MemStore 中,當MemStore 中的數據增長到一個閾值(預設64M)後,Region Server 會啟動 flasheatch 進程將 MemStore 中的數據寫人 StoreFile 持久化存儲,每次寫入後都形成一個單獨的 StoreFile。當客戶端檢索數據時,先在 MemStore中查找,如果MemStore 中不存在,則會在 StoreFile 中繼續查找。
- StoreFile:MemStore 記憶體中的數據寫到文件後就是StoreFile,StoreFile底層是以 HFile 的格式保存。HBase以Store的大小來判斷是否需要切分Region。
當一個Region 中所有 StoreFile 的大小和數量都增長到超過一個閾值時,HMaster 會把當前Region分割為兩個,並分配到其他 Region Server 上,實現負載均衡。
-
HFile:HFile 和 StoreFile 是同一個文件,只不過站在 HDFS 的角度稱這個文件為HFile,站在HBase的角度就稱這個文件為StoreFile。
-
HLog:負責記錄著數據的操作日誌,當HBase出現故障時可以進行日誌重放、故障恢復。例如,磁碟掉電導致 MemStore中的數據沒有持久化存儲到 StoreFile,這時就可以通過HLog日誌重放來恢複數據。
4.ZooKeeper
HBase 通過 ZooKeeper 來完成選舉 HMaster、監控 Region Server、維護元數據集群配置等工作,主要工作職責如下:
- 選舉HMaster:通ooKeeper來保證集中有1HMaster在運行,如果 HMaster 異常,則會通過選舉機制產生新的 HMaster 來提供服務;
- 監控Region Server: 通過 ZooKeeper 來監控 Region Server 的狀態,當Region Server 有異常的時候,通過回調的形式通知 HMaster 有關Region Server 上下線的信息;
- 維護元數據和集群配置:通過ooKeeper儲B信息並對外提供訪問介面。
5.HDFS
HDFS 為 HBase 提供底層數據存儲服務,同時為 HBase提供高可用的支持, HBase 將 HLog 存儲在 HDFS 上,當伺服器發生異常宕機時,可以重放 HLog 來恢複數據。
另外,非常歡迎大家加我VX: Abox_0226 ,備註「進群」,有關大數據技術的問題在群里一起探討。