
用戶端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 的高性能。
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完成數
據恢複。