Java 如何在Hbase中获取元数据信息

Java 如何在Hbase中获取元数据信息,java,hbase,metadata,Java,Hbase,Metadata,我想在Hbase中获取元数据信息。我的基本目的是- 1.获取有关表格的信息,如表格数量和表格名称 2.获取每个表中的columnfamilies名称 3.获取每个columnfamily中的列名称及其数据类型 是否有任何工具或命令可用于获取上述信息 信息 通过API: 使用HBaseAdmin类提供的。它返回一个字符串数组,其中包含所有用户空间表的名称 使用类结果提供的。它将族映射返回到其限定符和值的所有版本。您可以从中提取所需的信息 可以通过getMap()实现。就数据类型而言,HBase中的

我想在Hbase中获取元数据信息。我的基本目的是-

1.获取有关表格的信息,如表格数量和表格名称

2.获取每个表中的columnfamilies名称

3.获取每个columnfamily中的列名称及其数据类型

是否有任何工具或命令可用于获取上述信息 信息


通过API:

  • 使用HBaseAdmin类提供的。它返回一个字符串数组,其中包含所有用户空间表的名称

  • 使用类结果提供的。它将族映射返回到其限定符和值的所有版本。您可以从中提取所需的信息

  • 可以通过getMap()实现。就数据类型而言,HBase中的所有内容都是字节数组

  • 通过外壳:

    没有支持此功能的OOTB功能,但您可以将HBase命令与awk结合使用以快速实现:

    例如:

    列出表名和计数:echo“扫描‘演示’”bin/hbase shell |awk-F“{print$1}”

    获取所有CFs:回显“扫描'test1'”| bin/hbase shell | awk-F”=“ “{print$2}”awk-F:“{print$1}”

    获取所有列:echo“scan'demo'”| bin/hbase shell | awk-F“=”{print$2}'| awk-F“,“{print$1}”| awk-F”:“{print$2}”

    HTH

    您可以使用Hbase客户端API中的
    HbaseAdmin
    类 下面是获得所有表和列的示例程序,您也可以继续获得其他信息!还有,看看


    使用下面的类获取HbaseMetaData

    package com.usertest;
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.hbase.*;
    import org.apache.hadoop.hbase.client.*;
    import org.apache.hadoop.hbase.filter.PageFilter;
    
    import java.io.IOException;
    import java.util.*;
    import java.util.regex.Pattern;
    
    public class HbaseMetaData {
        private HBaseAdmin hBaseAdmin;
        private Configuration hBaseConfiguration;
    
        public HbaseMetaData () throws IOException {
            this.hBaseConfiguration = HBaseConfiguration.create();
            this.hBaseAdmin = new HBaseAdmin(hBaseConfiguration);
        }
    /** get all Table names **/
        public List<String> getTableNames(String regex) throws IOException {
            Pattern pattern=Pattern.compile(regex);
            List<String> tableList = new ArrayList<String>();
            TableName[] tableNames=hBaseAdmin.listTableNames();
            for (TableName tableName:tableNames){
                if(pattern.matcher(tableName.toString()).find()){
                    tableList.add(tableName.toString());
                }
            }
            return tableList;
        }
    /** Get all columns **/
        public Set<String> getColumns(String hbaseTable) throws IOException {
            return getColumns(hbaseTable, 10000);
        }
    /** get all columns from the table **/
        public Set<String> getColumns(String hbaseTable, int limitScan) throws IOException {
            Set<String> columnList = new TreeSet<String>();
            HTable hTable=new HTable(hBaseConfiguration, hbaseTable);
            Scan scan=new Scan();
            scan.setFilter(new PageFilter(limitScan));
            ResultScanner results = hTable.getScanner(scan);
            for(Result result:results){
                for(KeyValue keyValue:result.list()){
                    columnList.add(
                            new String(keyValue.getFamily()) + ":" +
                                    new String(keyValue.getQualifier())
                    );
                }
            }
            return columnList;
        }
    }
    
    package com.usertest;
    导入org.apache.hadoop.conf.Configuration;
    导入org.apache.hadoop.hbase.*;
    导入org.apache.hadoop.hbase.client.*;
    导入org.apache.hadoop.hbase.filter.PageFilter;
    导入java.io.IOException;
    导入java.util.*;
    导入java.util.regex.Pattern;
    公共类HbaseMetaData{
    私人HBaseAdmin HBaseAdmin;
    私有配置hBaseConfiguration;
    公共HbaseMetaData()引发IOException{
    this.hBaseConfiguration=hBaseConfiguration.create();
    this.hBaseAdmin=新的hBaseAdmin(hBaseConfiguration);
    }
    /**获取所有表名**/
    公共列表getTableNames(字符串正则表达式)引发IOException{
    Pattern=Pattern.compile(regex);
    List tableList=new ArrayList();
    TableName[]tableNames=hBaseAdmin.listTableNames();
    for(TableName TableName:tableNames){
    if(pattern.matcher(tableName.toString()).find()){
    tableList.add(tableName.toString());
    }
    }
    返回表格列表;
    }
    /**获取所有列**/
    公共集getColumns(字符串hbaseTable)引发IOException{
    返回getColumns(hbaseTable,10000);
    }
    /**从表中获取所有列**/
    公共集getColumns(字符串hbaseTable,int limitScan)引发IOException{
    Set columnList=new TreeSet();
    HTable HTable=新的HTable(hBaseConfiguration,hbaseTable);
    扫描=新扫描();
    setFilter(新页面过滤器(limitScan));
    结果扫描结果=hTable.getScanner(扫描);
    对于(结果:结果){
    for(KeyValue:result.list()){
    columnList.add(
    新字符串(keyValue.getFamily())+“:”+
    新字符串(keyValue.getQualifier())
    );
    }
    }
    返回列列表;
    }
    }
    
    Tarik,THANX的回复。我正在获取表和列族的列表。但我仍然无法获取列名。你能给我一个工作示例吗?我知道这个问题有点老了,为了更相关,我添加了我的答案。请查收
    package com.usertest;
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.hbase.*;
    import org.apache.hadoop.hbase.client.*;
    import org.apache.hadoop.hbase.filter.PageFilter;
    
    import java.io.IOException;
    import java.util.*;
    import java.util.regex.Pattern;
    
    public class HbaseMetaData {
        private HBaseAdmin hBaseAdmin;
        private Configuration hBaseConfiguration;
    
        public HbaseMetaData () throws IOException {
            this.hBaseConfiguration = HBaseConfiguration.create();
            this.hBaseAdmin = new HBaseAdmin(hBaseConfiguration);
        }
    /** get all Table names **/
        public List<String> getTableNames(String regex) throws IOException {
            Pattern pattern=Pattern.compile(regex);
            List<String> tableList = new ArrayList<String>();
            TableName[] tableNames=hBaseAdmin.listTableNames();
            for (TableName tableName:tableNames){
                if(pattern.matcher(tableName.toString()).find()){
                    tableList.add(tableName.toString());
                }
            }
            return tableList;
        }
    /** Get all columns **/
        public Set<String> getColumns(String hbaseTable) throws IOException {
            return getColumns(hbaseTable, 10000);
        }
    /** get all columns from the table **/
        public Set<String> getColumns(String hbaseTable, int limitScan) throws IOException {
            Set<String> columnList = new TreeSet<String>();
            HTable hTable=new HTable(hBaseConfiguration, hbaseTable);
            Scan scan=new Scan();
            scan.setFilter(new PageFilter(limitScan));
            ResultScanner results = hTable.getScanner(scan);
            for(Result result:results){
                for(KeyValue keyValue:result.list()){
                    columnList.add(
                            new String(keyValue.getFamily()) + ":" +
                                    new String(keyValue.getQualifier())
                    );
                }
            }
            return columnList;
        }
    }