我想在Hbase中获取元数据信息。我的基本目的是 -
1.获取有关表的信息,例如表的数量和表的名称。
2.记下每个表中的columnfamilies名称。
3.记住每个列中的列名称及其数据类型。
是否有任何工具或命令可以使用我们可以获得上述内容 信息??
答案 0 :(得分:3)
通过API:
使用 HBaseAdmin 类提供的 getTableNames() 。它返回一个包含所有用户空间表名称的字符串数组。
使用结果类提供的 getMap() 。它将族的映射返回到其限定符和值的所有版本。您可以从中提取所需的信息。
可以通过getMap()实现。就数据类型而言,HBase中的所有内容都是字节数组。
通过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)
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;
}
}