首頁>技術>

HBase 是分散式、面向列的開源資料庫,準確地說是面向列族。HDFS 為 HBase 提供可靠的底層資料儲存服務,MapReduce 為 HBase 提供高效能的計算能力,Zookeeper 為 HBase 提供穩定服務和 Failover 機制,因此我們說 HBase 是一個透過大量廉價的機器解決海量資料的高速儲存和讀取的分散式資料庫解決方案。

HBase 架構

HBase 是由 Client、Zookeeper、Master、HRegionServer、HDFS 等幾個核心體系組成,如圖所示。

Client

Client 使用 HBase 的 RPC 機制與 HMaster、HRegionServer 進行通訊。Client 與 HMaster 進行管理類通訊,與 HRegion Server 進行資料操作類通訊。

Zookeeper

HBase 透過 Zookeeper 來做 Master 的高可用、RegionServer 的監控、元資料的入口以及叢集配置的維護等工作。

具體工作如下:

1. 透過 Zoopkeeper 來保證叢集中只有 1 個 Master在執行,如果 Master異常,會透過競爭機制產生新的 Master提供服務。

2. 透過 Zoopkeeper 來監控 RegionServer 的狀態,當 RegionSevrer 有異常的時候,透過回撥的形式通知 Master 有關RegionServer 上下線的資訊。

3. 透過 Zoopkeeper 儲存元資料的統一入口地址。

HMaster

Master 節點的主要職責如下:

1. 為 RegionServer 分配 Region。

2. 維護整個叢集的負載均衡。

3. 維護叢集的元資料資訊,發現失效的 Region,並將失效的 Region 分配到正常RegionServer 上。

4. 當 RegionSever 失效的時候,協調對應 HLog 的拆分。

每個RegionServer維護一個HLog,而不是每個Region一個。這樣不同Region(來自不同table)的日誌會混在一起,這樣做的目的是不斷追加單個檔案相對於同時寫多個檔案而言,可以減少磁碟定址次數,因此可以提高對table的寫效能。帶來的麻煩是,如果一臺RegionServer下線,為了恢復其上的Region,需要將RegionServer上的log進行拆分,然後分發到其它RegionServer上進行恢復。

HRegionServer

HRegionServer 內部管理了一系列 HRegion 物件,每個 HRegion 對應 Table中的一個 ColumnFamily 的儲存,即一個 Store 管理一個 Region 上的一個列族(CF)。每個 Store 包含一個 MemStore 和 0 到多個 StoreFile。Store 是 HBase 的儲存核心,由 MemStore 和 StoreFile 組成。

HLog

資料在寫入時,首先寫入預寫日誌(Write Ahead Log),每個 HRegionServer 服務的所有 Region 的寫操作日誌都儲存在同一個日誌檔案中。資料並非直接寫入 HDFS,而是等快取到一定數量再批次寫入,寫入完成後在日誌中做標記。

MemStore

MemStore 是一個有序的記憶體快取區,使用者寫入的資料首先放入 MemStore,當 MemStore 滿了以後 Flush 成一個 StoreFile(儲存時對應為HFile),當 StoreFile 數量增到一定閥值,觸發 Compact 合併,將多個 StoreFile 合併成一個 StoreFile。StoreFiles 合併後逐步形成越來越大的 StoreFile,當 Region 內所有 StoreFiles(HFile) 的總大小超過閥值(hbase.hregion.max.filesize)即觸發分裂 Split,把當前的 Region Split 分成 2 個 Region,父 Region 下線,新 Spilt 出的 2 個子 Region 被 HMaster 分配到合適的 HRegionServer 上,使得原先 1 個 Region 的壓力得以分流到 2 個 Region 上。

HDFS

HDFS 為 HBase 提供最終的底層資料儲存服務,同時為 HBase 提供高可用(Hlog 儲存在HDFS)的支援。

11
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • nginx 限制了你的想象?那麼請用openresty