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

时间:2013-11-25 06:38:42

标签: java hbase metadata

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

  

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

     

2.记下每个表中的columnfamilies名称。

     

3.记住每个列中的列名称及其数据类型。

     

是否有任何工具或命令可以使用我们可以获得上述内容   信息??

2 个答案:

答案 0 :(得分:3)

通过API:

  1. 使用 HBaseAdmin 类提供的 getTableNames() 。它返回一个包含所有用户空间表名称的字符串数组。

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

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

  4. 通过shell:

    没有OOTB功能允许这样做,但您可以将HBase命令与 awk 结合使用来快速实现:

    例如:

      

    列出表名和计数: echo“scan'demo'”| bin / hbase shell   | awk -F“”'{print $ 1}'

         

    获取所有CF: echo“scan'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

答案 1 :(得分:1)

您可以使用Hbase客户端API

中的HbaseAdmin

下面是获取所有表和列相似的示例程序,您可以继续获取其他信息!另外,请查看HTableDescriptor.html

package mytest;
import com.usertest.*;

import java.io.IOException;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;


public class ListHbaseTablesAndColumns {
    public static void main(String[] args) {
        try {
            HbaseMetaData hbaseMetaData  =new HbaseMetaData();
            for(String hbaseTable:hbaseMetaData  .getTableNames(".*yourtables.*")){
                    for (String column : hbaseMetaData  .getColumns(hbaseTable, 10000)) {
                        System.out.println(hbaseTable + "," + column);
                    }

            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

使用以下类来获取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;
    }
}