java—如何使用行的id获取行所在的区域?

dgtucam1  于 2021-06-09  发布在  Hbase
关注(0)|答案(1)|浏览(238)

如果我有一个id=“my\u row\u id”的行,那么在使用hbase的javaapi时,如何使用“my\u row\u id”来获取此行所在的区域(我正在编写的代码将在每个区域服务器上运行)
我发现这样的例子:

for (JVMClusterUtil.RegionServerThread t : util.getMiniHBaseCluster().getLiveRegionServerThreads()) {
      for (HRegionInfo r : t.getRegionServer().getOnlineRegions()) {
        if (!Arrays.equals(r.getTableDesc().getName(), "my_table"))) {
          continue;
        }

        HRegion region = t.getRegionServer().getOnlineRegion(r.getRegionName());
      }
   }

但是util.getminihbasecluster()似乎来自一个测试实用程序,如何在区域服务器上获得jvmclusterutil.regionserverthread的“真实”示例?

nzk0hqpo

nzk0hqpo1#

您不需要在每个区域服务器上运行代码来查找行所在的位置。
hbase表具有拆分,这些拆分将数据跨集群中的节点进行分区。这是hbase master使用的元信息。api中也有:

HTable table = new HTable(configuration, tableName);
RegionLocator regionLocator = table.getRegionLocator();
HRegionLocation location = regionLocator.getRegionLocation(myRow);

String host = location.getHostname();

相关问题