Skip to content

HBase架构

1. Master结构

1. 总体架构

Alt text 元数据表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表相关文件:
Alt text 负载均衡器线程能够通过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中添加依赖:

xml
<dependency>
    <groupId>org.apache.hbase</groupId>
    <artifactId>hbase-server</artifactId>
    <version>2.6.1-hadoop3</version>
</dependency>

master主要是通过HMaster类实现:
Alt text

2. ReginServer架构

Alt text 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读取这个日志文件重建。