HMaster是HBase主/從集羣架構中的中央節點。一般一個HBase集羣存在多個HMaster節點,其中一個爲Active Master,其他爲Backup Master.
Hbase每時每刻只有一個hmaster主服務器程序在運行,hmaster將region分配給region服務器,協調region服務器的負載並維護集羣的狀態。Hmaster不會對外提供數據服務,而是由region服務器負責全部regions的讀寫請求及操做。
因爲hmaster只維護表和region的元數據,而不參與數據的輸入/輸出過程,hmaster失效僅僅會致使全部的元數據沒法被修改,但表的數據讀/寫仍是能夠正常進行的。
HMaster的做用:
- 爲Region server分配region
- 負責Region server的負載均衡
- 發現失效的Region server並從新分配其上的region
- HDFS上的垃圾文件回收css
HRegionServer做用:node
能夠看到,client訪問hbase上的數據並不須要master參與(尋址訪問zookeeper和region server,數據讀寫訪問region server),master僅僅維護table和region的元數據信息(table的元數據信息保存在zookeeper上),負載很低。
注意:master上存放的元數據是region的存儲位置信息,可是在用戶讀寫數據時,都是先寫到region server的WAL日誌中,以後由region server負責將其刷新到HFile中,即region中。因此,用戶並不直接接觸region,無需知道region的位置,因此其並不從master處得到什麼位置元數據,而只須要從zookeeper中獲取region server的位置元數據,以後便直接和region server通訊。
HRegionServer存取一個子表時,會建立一個HRegion對象,而後對錶的每一個列族建立一個Store實例,每一個Store都會有一個MemStore和0個或多個StoreFile與之對應,每一個StoreFile都會對應一個HFile, HFile就是實際的存儲文件。所以,一個HRegion有多少個列族就有多少個Store。
一個HRegionServer會有多個HRegion和一個HLog。
當HRegionServer意外終止後,HMaster會經過Zookeeper感知到。服務器
Zookeeper做用在於:markdown
zookeeper是hbase集羣的」協調器」。因爲zookeeper的輕量級特性,所以咱們能夠將多個hbase集羣共用一個zookeeper集羣,以節約大量的服務器。多個hbase集羣共用zookeeper集羣的方法是使用同一組ip,修改不一樣hbase集羣的」zookeeper.znode.parent」屬性,讓它們使用不一樣的根目錄。好比cluster1使用/hbase-c1,cluster2使用/hbase-c2,等等。架構