我在hbase中有数百万行,其中包含可计数的运行时列限定符(即小于10)。很难扫描hbase表中的所有行。是否有任何方法可以通过hbase shell或任何可打印的实用程序打印列族中的列限定符?
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
1条答案
按热度按时间wlwcrazw1#
到目前为止,我还没有意识到预定义的实用程序。可以使用下面的代码获取表中列族的列限定符。
用法:hbasecqidentifier[tablename][columnfamily]
注意:在classpath中添加hadoop和hbase jar以及hbase-site.xml