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,等等。架构