HBase架构
1. Master结构
1. 总体架构
元数据表Meta表: 是HBase内置的系统表,在list命令中被过滤掉了,不能修改这张表。它的表结构如下:
名称 | 描述 |
---|---|
rowKey | ([table],[region start key],[region id]): [表名]标识了该Region属于那张表。 [region起始位置]标识了该Region在表中的划分rowkey起始。 [regionID]标识了该表中Region标识 |
info:regioninfo | 为region信息,存储一个HRegionInfo对象。 |
info:server | 当前region所处的RegionServer信息,包含端口号。 |
info:serverstartcode | 当前region被分到RegionServer的起始时间。 |
如果一个表处于切分的过程中,即region切分,还会多出两列info:splitA和info:splitB,存储值也是 HRegionInfo对象,拆分结束后,删除这两列。
在HDFS上面可以查看meta表相关文件: 负载均衡器线程能够通过meta表中的列值info:server获取region的信息,能够通过修改meta表和修改数据完成负载均衡。
提示
在客户端对元数据进行操作的时候才会连接master(使用Admin对象),如果对数据进行读写(使用Table对象),直接连接zookeeper读取目录/hbase/meta-region-server节点信息,该节点里面meta表会记录region-server的位置。直接读取即可,不需要访问master,这样可以减轻master的压力,相当于master专注meta表的写操作,客户端可直接读取meta表。
在HBase的2.3版本更新了一种新模式:Master Registry。客户端可以访问master来读取meta表信息。加大了 master的压力,减轻了zookeeper的压力。
1.2 源码查看
pom.xml中添加依赖:
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>2.6.1-hadoop3</version>
</dependency>
master主要是通过HMaster类实现:
2. ReginServer架构
HBase中存储的最小单位是Region,一个Region由一个或多个Store组成。每个Store都有对应的一个MemStore(原因是MemStore只会溢写到对应一个Store中),方便对存储的RowKey进行排序。
2.1 MemStore
ReginServer的写缓存组件,由于HFile中的数据要求是有序的,所以数据是先存储在MemStore中,排好序后,等到达刷写时机才会刷写到HFile,每次刷写都会形成一个新的HFile,写入到对应的文件夹store中。
2.2 BlockCache
ReginServer的读缓存组件,每次查询出的数据会缓存在BlockCache中,方便下次查询(读内存肯定比读HDFS文件系统快)。
2.3 WAL
由于数据要经MemStore排序后才能刷写到HFile,但把数据保存在内存中会有很高的概率导致数据丢失,为了解决这个问题,数据会先写在一个叫做Write-Ahead logfile的文件中,然后再写入MemStore中。所以在系统出现故障的时候,数据可以通过其他ReginServer读取这个日志文件重建。