HBase寻址机制及HMaster、RegionServer容错

HBase通过-ROOT-和META表实现寻址,最多3次跳转定位到用户表region。HMaster容错通过ZK重新选举active master,RegionServer通过心跳报告确保容错。客户端缓存位置信息,异常时重新定位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HBase寻址机制

在这里插入图片描述
HBase提供了两张特殊的目录表-ROOT-和META表,-ROOT-表用来查询所有的META表中region位置。HBase设计中只有一个root region即root region从不进行切分,从而保证类似于B+树结构的三层查找结构:

第1层:zookeeper中包含root region位置信息的节点,如-ROOT-表在哪台regionserver上

第2层:从-ROOT-表中查找对应的meta region位置即.META.表所在位置

第3层:从META表中查找用户表对应region位置

目录表中的行健由region表名、起始行和ID(通常是以毫秒表示的当前时间)连接而成。HBase0.90.0版本开始,主键上有另一个散列值附加在后面,目前这个附加部分只用在用户表的region中。

注意:

1.root region永远不会被split,保证了最多需要三次跳转,就能定位到任意region

2.META表每行保存一个region的位置信息,row key采用表名+表的最后一行编码而成

3.为了加快访问,META表的全部region都保存在内存中

4.client会将查询过的位置信息保存缓存起来,缓存不会主动失效,因此如果client上的缓存全部失效,则需要进行最多6次网络来回,才能定位到正确的region(其中三次用来发现缓存失效,另外三次用来获取位置信息)

关于寻址的几个问题:

1.既然ZK中能保存-ROOT-信息,那么为什么不把META信息直接保存在ZK中,而需要通过-ROOT-表来定位?

ZK不适合保存大量数据,而META表主要是保存region和RS的映射信息,region的数量没有具体约束,只要在内存允许的范围内,region数量可以有很多,如果保存在ZK中,ZK的压力会很大。所以,通过一个-ROOT-表来转存到regionserver中相比直接保存在ZK中,也就多了一层-ROOT-表的查询(类似于一个索引表),对性能来说影响不大。

2.client查找到目标地址后,下一次请求还需要走ZK —> -ROOT- —> META这个流程么?

不需要,client端有缓存,第一次查询到相应region所在RS后,这个信息将被缓存到client端,以后每次访问都直接从缓存中获取RS地址即可。

但是如果访问的region在RS上发生了改变,比如被balancer迁移到其他RS上了,这个时候,通过缓存的地址访问会出现异常,在出现异常的情况下,client需要重新走一遍上面的流程来获取新的RS地址。

HBase容错性

HMaster容错

配置HA,当active master宕机时,通过ZK重新选择一个新的active master。

注意:

1.无HMaster过程中,数据读取仍照常进行

2.无HMaster过程中,region切分、负载均衡等无法进行

RegionServer容错

定时向ZK汇报心跳,如果一定时间内未出现心跳,比如RS宕机,HMaster将该RS上的region、预写日志重新分配到其他RS上

HBase是一个分布式的列存储数据库,它的数据存储在HDFS中,采用了一种称为“HRegion”的存储单元进行管理。HRegion是一个逻辑上的数据存储单元,它由一系列的HStore组成,每个HStore包含了一系列的HFile。HFile是HBase中数据存储的最小单元,它是一个按照一定格式进行组织的文件。每个HFile中存储了一些行键范围内的数据,这些数据按照列族和列限定符进行组织。HBase利用HFile的这种存储方式,使得数据可以被高效地查询和访问。 当客户端需要访问HBase中的数据时,它需要先通过HBase客户端API向ZooKeeper请求获取当前正在服务的RegionServer列表。然后,客户端根据要访问的数据的行键,计算出该数据所在的Region的信息,包括Region的名称和Region所在的RegionServer地址。在获取到RegionServer地址之后,客户端将数据查询请求发送给该RegionServerRegionServer会根据数据的行键在本地的HRegion中查找相应的数据,并将结果返回给客户端。 HBase寻址机制主要是通过行键分片实现的。HBase将所有的数据按照行键进行排序,并将数据划分成若干个连续的区间,每个区间对应一个HRegion。当客户端需要访问某个数据时,它会首先计算出该数据所属的区间,然后根据该区间对应的HRegion的信息进行访问。在HRegion内部,HBase采用了一种称为“MemStore”的内存缓存机制,用于缓存最近写入的数据。当MemStore中的数据积累到一定程度时,HBase会将其中的数据写入磁盘中的HFile中。这样可以有效地提高HBase的写入性能和数据的可用性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值