2017-12-11 2 views
0

HBASE에 수백만 행이 있습니다.이 열은 계산 가능한 런타임 열 수식어 (예 : 10 미만)를 포함합니다. HBASE 테이블에서 전체 행을 스캔하는 것은 어렵습니다. hbase 쉘이나 인쇄 할 수있는 유틸리티를 통해 열 패밀리의 열 한정자를 인쇄하는 방법이 있습니까?hbase 쉘 명령을 통해 열 패밀리 및 열 한정자 표시

답변

0

저는 지금까지 미리 정의 된 유틸리티를 알지 못합니다. 다음 코드를 사용하여 테이블 내의 열 패밀리에 대한 열 한정자를 가져올 수 있습니다.

사용법 : 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()); 
     } 
    } 
} 

참고 : 클래스 경로에 HBase를-site.xml 파일과 함께 하둡과 HBase를 항아리를 추가

관련 문제