使用hbase API获取Region Name的正确方法

时间:2014-12-22 11:40:47

标签: java hadoop hbase

我正在尝试获取"地区名称"对于"表"使用HBase API。

设置如下:

  1. Hbase伪分布式安装(版本0.98.7)。

  2. Hadoop 2.5.1安装。

  3. Hbase包含很少的表用于测试目的。有关可用区域的信息如下所示。

    enter image description here

    "地区名称"对应于表" 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"或者我的方法是错的。 请帮助我获取给定表名的区域信息。

1 个答案:

答案 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;每次都有不同的时间戳。此代码也假定您的表具有单个区域。