Hbase Region定位

Hbase Region定位

2017年3月4日

15:36

 

 

获取每个table的row对应的locate,具体实现如下:

1、调用locateRegionInMeta函数,首先查找cache中是否有table对应的row,比较缓存中的Table对应的startkey与endkey,判断row是否在某个region中;若能找到,直接返回该regionlcation信息

2、若cache没有开启或cache为空或没有找到,则需要构造一个metakey,该metakey是用来在meta表中查找Regionlocation的rowkey,构造rowkey=tableName+startkey+9999999999999+encode

3、在尝试次数范围内,清空metaCache中的对应本次查询的tableName和row的信息;

metaCache.clearCache(tableName,row);

4、重新获取metaLocation

metaLocation=locateRegion(TableName.META_TABLE_NAME,metaKey,false,false);

4.1、从ZK中获取metaLocation信息

this.registry.getMetaRegionLocation();

4.2、从ZK的meta-region-server节点获取当前metaLocation信息


4.3、将获取到的metaLocation对应的ServerName返回

5、构造ClientService请求服务

ClientService.BlockingInterfaceservice=getClient(metaLocation.getDefaultRegionLocation().getServerName());

6、调用getRowOrBefore获取metakey在metaInfo中对应的RegionServer信息


6.1、首先构造一个GetRowOrBeforeRequest请求

6.2、通过ClinetService将GetRowOrBeforeRequest请求发送

6.3、根据request中的Region以及row和family,调用如下函数:

r=region.getClosestRowBefore(row,family);

6.3.1、获取family对应的Store

Storestore=getStore(family);

6.3.2、首先先去memstore中获取rowkeyCandidate

this.memstore.getRowKeyAtOrBefore(state);

6.3.3、逐个遍历Store中所有StoreFiles,如果能找到metakey的candidate,则比较此次找到的是否是最接近的

6.3.4、返回最接近的candidate

 

6.4、将结果r返回


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值