Hbase Region定位

    xiaoxiao2021-04-12  32

    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返回

    转载请注明原文地址: https://ju.6miu.com/read-668079.html

    最新回复(0)