我正在尝试获取"地区名称"对于"表"使用HBase API。
设置如下:
Hbase伪分布式安装(版本0.98.7)。
Hadoop 2.5.1安装。
Hbase包含很少的表用于测试目的。有关可用区域的信息如下所示。
"地区名称"对应于表" test_table"已被有目的地强调。
现在,我一直在尝试使用以下代码从hbase的基于java的API获取这些区域信息。
void scanTable(String tabName){
org.apache.hadoop.conf.Configuration config = HBaseConfiguration.create();
try{
HTable table = new HTable(config, tabName);
org.apache.hadoop.hbase.TableName tn = table.getName();
HRegionInfo hr = new HRegionInfo(tn);
System.out.println(hr.getRegionNameAsString());
table.close();
}catch(Exception ex){
ex.printStackTrace();
}
}
}
每当我传递一个表名,说" test_table"时,每次运行时都会以不同的方式返回regionName。
跑1:
test_table,,1419247657866.77b98d085239ed8668596ea659a7ad7d.
跑2:
test_table,,1419247839479.d3097b0f4b407ca827e9fa3773b4d7c7.
RUN 3:
test_table,,1419247859921.e1e39678fa724d7168cd4100289c4234.
我假设我使用错误的方法来生成" region_name"或者我的方法是错的。 请帮助我获取给定表名的区域信息。
答案 0 :(得分:3)
HBaseAdmin中有一个getTableRegions(),它返回所需表名的所有区域信息。
列出getTableRegions(final TableName tableName)
下面是输出给定表名的区域名称的方法。
void getRegionOfTable(String tabName){
org.apache.hadoop.hbase.TableName tn = org.apache.hadoop.hbase.TableName.valueOf(tabName);
org.apache.hadoop.conf.Configuration config = HBaseConfiguration.create();
HRegionInfo ob;
try{
HBaseAdmin hba = new HBaseAdmin(config);
List<HRegionInfo> lr = hba.getTableRegions(tn);
Iterator<HRegionInfo> ir = lr.iterator();
while(ir.hasNext()){
ob = ir.next();
System.out.println(ob.getRegionNameAsString());
}
hba.close();
}catch(Exception ex){
ex.printStackTrace();
}
}
您的代码每次都会产生不同的结果,因为您正在构建一个新的&#34;区域&#34;每次都有不同的时间戳。此代码也假定您的表具有单个区域。