通过hbase shell命令显示列族和列限定符

zc0qhyus  于 2021-06-08  发布在  Hbase
关注(0)|答案(1)|浏览(403)

我在hbase中有数百万行,其中包含可计数的运行时列限定符(即小于10)。很难扫描hbase表中的所有行。是否有任何方法可以通过hbase shell或任何可打印的实用程序打印列族中的列限定符?

wlwcrazw

wlwcrazw1#

到目前为止,我还没有意识到预定义的实用程序。可以使用下面的代码获取表中列族的列限定符。
用法:hbasecqidentifier[tablename][columnfamily]

import java.io.IOException;
import java.util.Set;

import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;

public class HbaseCqIdentifier {
    private static Connection conn;
    private static Set<byte[]> columnQualifiers;

    public static Admin getConnection() throws IOException {
        if (conn == null) {
            conn = ConnectionFactory.createConnection(HBaseConfiguration.create());
        }
        return conn.getAdmin();
    }

    public static void main(String args[]) throws IOException {
        getConnection();
        scan(args[0], args[1]);
        columnQualifiers.forEach((k) -> System.out.println("Column Qualifier : " + Bytes.toString(k)));
    }

    public static void scan(String tableName, String columnFamily) throws IOException {
        System.out.println("Table Name : " + tableName);
        Table table = conn.getTable(TableName.valueOf(tableName));
        Scan scan = new Scan();
        scan.addFamily(Bytes.toBytes(columnFamily));
        ResultScanner rs = table.getScanner(scan);

        while(rs.iterator().hasNext()){
            rs.forEach((k)-> columnQualifiers = k.getFamilyMap(Bytes.toBytes(columnFamily)).keySet());
        }
    }
}

注意:在classpath中添加hadoop和hbase jar以及hbase-site.xml

相关问题