如果我有ID =" my_row_id"的行,我怎样才能使用" my_row_id"在使用Hbase的Java API时获取该行所在的区域? (我写的代码将在每个区域服务器上运行)
我找到了这样的例子:
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 的实例?
答案 0 :(得分:1)
您不需要在每个区域服务器上运行代码来查找行所在的位置。
HBase表有分割,它在群集中的节点之间分割数据。这是HBase master使用的元信息。它也可以在api中使用:
HTable table = new HTable(configuration, tableName);
RegionLocator regionLocator = table.getRegionLocator();
HRegionLocation location = regionLocator.getRegionLocation(myRow);
String host = location.getHostname();