Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用hbase API获取区域名称的正确方法_Java_Hadoop_Hbase - Fatal编程技术网

Java 使用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

我正在尝试使用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.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之后引入/