应该是这样的,如果put数据的话,肯定会有表名字的,,是根据表tableName的row所对应的HRegion 引用:
HRegion所在位置过程关键在private HRegionLocation locateRegion(final byte [] tableName,final byte [] row, boolean useCache)方法中,并且为递归方法,过程如下:
调用locateRegionInMeta方法到.META.表中查找tableName的row所对应的HRegion所在位置,先从本地缓存查找,如果没有,则进行下一步;
调用locateRegionInMeta方法到-ROOT-表中查找.META.所对应的HRegion所在位置,先从本地缓存查找,如果没有,则进行下一步
通过rootRegionTracker(即从zk上)获取RootRegionServer地址,即找到-ROOT-表所在的RegionServer地址,然后获取到.META.所在位置,最后在获取.META.表上所有HRegion,并将其加入到本地缓存。
详细参考:这篇帖子
HBase源码分析:HTable put过程分析
|