Hbase主要组件

1.1 Hbase的架构组成

HBase采用Master/Slave架构搭建集群,它隶属于Hadoop生态系统,由以下类型节点组成:

HMaster节点、HRegionServer节点、ZooKeeper集群,而在底层,它将数据存储于HDFS中,因而涉及到HDFS的NameNode、DataNode等,总体结构如下:

 各组件说明:

Client:

          1)使用HBase RPC机制与HMaster和HRegionServer进行通信;

          2)Client与HMaster进行通信进行管理类操作;

          3)Client与HRegionServer进行数据读写类操作;

 

HMaster:NAMENODE RESOURCEMANAGER

HMaster 没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper保证总有一个Master在运行。

HMaster主要负责Table和Region的管理工作:

        1)管理用户对表的增删改查操作;

        2)管理HRegionServer的负载均衡,调整Region分布;

        3)Region Split后,负责新Region的分布;

        4)在HRegionServer停机后,负责失效HRegionServer上Region 的迁移;

 

HRegionServer:DATANODE NODEMANAGER

HBase中最核心的模块;

        1)维护region,处理对这些region的IO请求;

        2)Regionserver负责切分在运行过程中变得过大的region;

Region的概念
Region是HBase数据管理的基本单位。数据的move,数据的balance,数据的split,都是按照region来进行操作的。
region中存储这用户的真实数据,而为了管理这些数据,HBase使用了RegionSever来管理region。
一个表中可以包含一个或多个Region。
每个Region只能被一个RS(RegionServer)提供服务,RS可以同时服务多个Region,来自不同RS上的Region组合成表格的整体逻辑视图。
regionServer其实是hbase的服务,部署在一台物理服务器上,region有一点像关系型数据的分区,数据存放在region中,当然region下面还有很多结构,确切来
说数据存放在memstore和hfile中。我们访问hbase的时候,先去hbase系统表查找定位这条记录属于哪个region,然后定位到这个region属于哪个服务器,然后就到哪个服务器里面查找对应region中的数据

HRegion:

HBase使用RowKey将表水平切割成多个HRegion,从HMaster的角度,每个HRegion都纪录了它的StartKey和EndKey(第一个HRegion的StartKey为空,最后一个HRegion的EndKey为空),由于RowKey是排序的,因而Client可以通过HMaster快速的定位每个RowKey在哪个HRegion中。

Hbase主要组件_第1张图片

 

Zookeeper:

1)ZooKeeper为HBase集群提供协调服务,它管理着HMaster和HRegionServer的状态(available/alive等),并且保证集群中只有一个HMaster,会在它们宕机时通知给HMaster,从而HMaster可以实现HMaster之间的故障转移;

2)实时监控HRegionServer的上线和下线信息,并实时通知给HMaster;

3)存储HBase的Meta Table(hbase:meta)的位置,Meta Table表存储了集群中所有用户HRegion的位置信息,且不能split;

4)Zookeeper的引入使得Master不再是单点故障 HMaster虽然可以开启多个 但是不是越多越好 两个 --> 只开一个 nn2 贡献出来保存region nn2 没有 block --> 尴尬

Hbase主要组件_第2张图片

在zookeeper的节点中:
/hbasae/master:来表示Active的HMaster;
如果当前Active的HMaster宕机,则该节点消失,因而其他HMaster得到通知,而将自身转换成Active的HMaster,在变为Active的HMaster之前,它会创建在/hbase/back-masters/下创建自己的Ephemeral节点;
 
nn1 hmaster --> 单点问题 --> 每天挂一次
nn2 - s4 regionserver
1.2 HRegionServer详解
Hbase主要组件_第3张图片
 

HRegionServer一般和DataNode在同一台机器上运行,实现数据的本地性。

1)HRegionServer内部管理了一系列HRegion对象,每个HRegion对应了Table中的一个Region。

2)一个Table可以有一个或多个Region,他们可以在一个相同的HRegionServer上,也可以分布在不同的HRegionServer上,一个HRegionServer可以有多个HRegion,他们分别属于不同的Table。

3)HRegion由多个Store(HStore)构成,每个HStore对应了一个Table在这个HRegion中的一个Column Family,即每个Column Family就是一个集中的存储单元,因而最好将具有相近IO特性的Column存储在一个Column Family,以实现高效读取。

4)每个HRegionServer中都会有一个HLog对象。

HLog是一个实现 Write Ahead Log 的类,每次用户操作写入Memstore的同时,也会写一份数据到HLog文件,HLog文件定期会滚动出新,并删除旧的文件(已持久化到StoreFile中的数据)。

 

引入HLog原因:灾难恢复。在分布式系统环境中,无法避免系统出错或者宕机,一旦HRegionServer意外退出,MemStore中的内存数据就会丢失,引入HLog就是防止这种情况。

 

5)一个HStore由一个MemStore 和0个或多个StoreFile组成。

MemStore:

是一个写缓存(In Memory Sorted Buffer),所有数据的写在完成WAL日志写后,会 写入MemStore中,由MemStore根据一定的算法将数据Flush到底层HDFS文件中(HFile),通常每个HRegion中的每个 Column Family有一个自己的MemStore。

 

StoreFile(Hfile):

用于存储HBase的数据(Cell/KeyValue)。在HFile中的数据是按RowKey、Column Family、Column排序,对相同的Cell(即这三个值都一样),则按timestamp倒序排列。

 

你可能感兴趣的:(Hbase)