Java 从HBase中的get结果动态获取所有列

Java 从HBase中的get结果动态获取所有列,java,hadoop,hbase,Java,Hadoop,Hbase,我正在处理从Habse中的表检索到的Get对象。我想动态检索与该get相关的所有列值,因为我不知道列族的确切名称 val result1 = hTable.get(g) if (!result1.isEmpty) { //binaryEpisodes = result1.getValue(Bytes.toBytes("episodes"),Bytes.toBytes("episodes")) //instead of above r

我正在处理从Habse中的表检索到的Get对象。我想动态检索与该get相关的所有列值,因为我不知道列族的确切名称

      val result1 = hTable.get(g)  
    if (!result1.isEmpty) {
            //binaryEpisodes = result1.getValue(Bytes.toBytes("episodes"),Bytes.toBytes("episodes"))
        //instead of above retrieve all values dynamically
}
  • 简单方法:
获取原始单元格和CF、列信息。 您必须执行以下示例中的操作

public static void printResult(Result result, Logger logger) {
        logger.info("Row: ");
        for (Cell cell : result.rawCells()) {
            byte[] family = CellUtil.cloneFamily(cell);
            byte[] column = CellUtil.cloneQualifier(cell);
            byte[] value = CellUtil.cloneValue(cell);
            logger.info("\t" + Bytes.toString(family) + ":" + Bytes.toString(column) + " = " + Bytes.toString(value));
    }
}
  • Hbase管理方式:Hbase客户端API由
    HbaseAdmin
    类公开,如下所示
客户会喜欢

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;
    }
}
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())
);
}
}
返回列列表;
}
}
  • 简单方法:
获取原始单元格和CF、列信息。 您必须执行以下示例中的操作

public static void printResult(Result result, Logger logger) {
        logger.info("Row: ");
        for (Cell cell : result.rawCells()) {
            byte[] family = CellUtil.cloneFamily(cell);
            byte[] column = CellUtil.cloneQualifier(cell);
            byte[] value = CellUtil.cloneValue(cell);
            logger.info("\t" + Bytes.toString(family) + ":" + Bytes.toString(column) + " = " + Bytes.toString(value));
    }
}
  • Hbase管理方式:Hbase客户端API由
    HbaseAdmin
    类公开,如下所示
客户会喜欢

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;
    }
}
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())
);
}
}
返回列列表;
}
}

Lucky:您是否至少能够尝试下面提供的解决方案?在这方面有任何问题吗???幸运的是:你至少能尝试下面提供的解决方案吗?在这方面有任何问题吗???看来您使用的HTable构造函数是不受欢迎的。我同意很久以前我在hbase工作过。如果您对答案满意,请遵循。请小心接受作为所有者的解决方案。您使用的HTable构造函数似乎不受欢迎。我同意很久以前我在hbase工作过。如果您对答案满意,请遵循以下说明。请作为所有者接受解决方案。