天天看點

HBase核心功能子產品--讀書筆記

HBase核心功能子產品--讀書筆記

用戶端Client

用戶端 Client 是整個 HBase 系統的入口。使用者直接通過用戶端操作 HBase。用戶端

使用 HBase 的 RPC 機制與 HMaster 和 RegionServer進行通信。對于管理類操作Client 與

HMaster 進行 RPC 通信對于資料讀寫類操作Client 與RegionServer 進行 RPC 互動。這裡

用戶端可以是多個并不限定是原生 Java 接口還有 Thrift、Avro、Rest等用戶端模式甚

至 MapReduce 也可以算作一種用戶端。

協調服務元件Zookeeper

ZooKeeper Quorum隊列負責管理 HBase 中多 HMaster 的選舉、伺服器之間狀态同

步等。再具體一些就是HBase 中 ZooKeeper 執行個體負責的協調工作有存儲 HBase 中繼資料信

息、實時監控 RegionServer、存儲所有 Region 的尋址入口當然還有最常見的功能就是保證

HBase 叢集中隻有一個HMaster 節點

主節點Hmaster

HMaster 沒有單點問題在HBase 中可以啟動多個 HMaster通過ZooKeeper 的 Master

選舉機制保證總有一個 Master 正常運作并提供服務其他 HMaster 作為備選時刻準備當目

前 HMaster 出現問題時提供服務。HMaster 主要負責Table 和 Region 的管理工作

管理使用者對 Table 的增、删、改、查操作。

管理 RegionServer 的負載均衡調整 Region 分布。

在 Region 分裂後負責新 Region 的配置設定。

在 RegionServer 當機後負責失效 RegionServer 上的 Region 遷移。

Region 節點 HRegionServer

HRegionServer 主要負責響應使用者 I/O 請求向 HDFS 檔案系統中讀寫資料是 HBase

中最核心的子產品。HRegionServer 内部管理了一系列 HRegion對象每個 HRegion 對應了

Table 中的一個Region。HRegion 由多個HStore 組成每個 HStore 對應了Table 中的一個

Column Family 的存儲。可以看出每個 Column Family 其實就是一個集中的存儲單元因

此最好将具備共同 I/O 特性的列放在一個 Column Family 中這樣能保證讀寫的高效性。

HStore 存 儲 是 HBase 存 儲 的 核 心 由 兩 部 分 組 成MemStore 和

StoreFile。MemStore是 Sorted Memory Buffer使用者寫入的資料首先會放入 MemStore 中當

MemStore 滿了以後會緩沖flush成一個 StoreFile底層實作是 HFile 當 StoreFile 檔案數

量增長到一定門檻值會觸發 Compact 操作将多個StoreFiles 合并成一個 StoreFile在合并

過程中會進行版本合并和資料删除是以可以看出 HBase 其實隻有增加資料所有的更新和

删除操作都是在後續的 Compact 過程中進行的這使得使用者的寫操作隻要進入記憶體中就可以

立即傳回保證了 HBase I/O 的高性能。

HBase核心功能子產品--讀書筆記

StoreFiles 在觸發 Compact 操作後會逐漸形成越來越大的 StoreFile當單個StoreFile

大小超過一定門檻值後會觸發 Split 操作同時把目前Region 分裂成 2 個 Region父 Region

會下線新分裂的 2 個子 Region 會被HMaster 配置設定到相應的 HRegionServer 上使得原先 1

個 Region 的壓力得以分流到 2 個 Region 上。

每個 HRegionServer 中都有一個 HLog 對象HLog 是一個實作 Write Ahead Log 的類

在每次使用者操作寫入 MemStore 的同時也會寫一份資料到HLog 檔案中HLog 檔案定期

會滾動出新并删除舊的檔案已持久化到 StoreFile 中的資料 。在 HRegionServer 意外終

止後HMaster 會通過 ZooKeeper 感覺到首先處理遺留的 HLog 檔案将其中不同 Region

的 Log 資料進行拆分分别放到相應 Region 的目錄下然後再将失效的 Region 重新配置設定

領取到這些 Region 的 HRegionServer 在加載 Region 的過程中會發現有曆史 HLog 需要處

理是以會将 HLog 中的資料回放到 MemStore 中然後緩沖flush到 StoreFiles完成數

據恢複。