Java 使用hbase API获取区域名称的正确方法
我正在尝试使用HBase API获取“表”的“区域名称” 设置如下所述:Java 使用hbase API获取区域名称的正确方法,java,hadoop,hbase,Java,Hadoop,Hbase,我正在尝试使用HBase API获取“表”的“区域名称” 设置如下所述: Hbase伪分布式安装(版本0.98.7) Hadoop 2.5.1安装 Hbase包含的用于测试的表很少。有关可用区域的信息显示在下面的web UI中 特意突出显示了与表“test_table”对应的“region name” 现在,我一直在尝试使用下面的代码从基于java的hbase API获取这些区域信息 void scanTable(String tabName){ org.apache.had
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.
运行3:
test_table,,1419247859921.e1e39678fa724d7168cd4100289c4234.
我假设我使用了错误的方法来生成“区域名称”,或者我的方法是错误的。
请帮助我获取给定表名的区域信息。HBaseAdmin中有一个getTableRegions(),它返回所需表名的所有区域信息
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();
}
}
列表getTableRegions(最终表名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();
}
}
void getRegionFTable(字符串选项卡名){
org.apache.hadoop.hbase.TableName tn=org.apache.hadoop.hbase.TableName.valueOf(tabName);
org.apache.hadoop.conf.Configuration config=HBaseConfiguration.create();
hregoninfo ob;
试一试{
HBaseAdmin hba=新的HBaseAdmin(配置);
列表lr=hba.getTableRegions(tn);
迭代器ir=lr.Iterator();
while(ir.hasNext()){
ob=ir.next();
System.out.println(ob.getRegionNameAsString());
}
hba.close();
}捕获(例外情况除外){
例如printStackTrace();
}
}
您的代码每次都会产生不同的结果,因为您每次都在用不同的时间戳构建一个新的“区域”。此外,该代码假定您的表有一个区域 谢谢@th30z。尽管我已经确定了另一种获得正确区域名称的方法,但它仍然有效。我将使用输出区域名称的完整java方法更新您的答案。:)同样,这对于0.96以下的版本也不起作用。As org.apache.hadoop.hbase.TableName仅在0.96之后引入/