hbase 第一次查询慢_HBase寻址机制以及HMaster和RegionServer容错

深入探讨HBASE​mp.weixin.qq.com
158ac2bbadc467cc740bf1d38aeabb9c.png

HBase寻址机制

ef3b3d9ec369fe7598bf5a90baefbd76.png

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上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值