2011-02-03 5 views
5

Hbase 테이블이 있는지를 확인하는 가장 빠른 방법은 무엇입니까? 가장 빠른 이들 중 어느테이블이 존재하는지 확인하십시오.

http://hbase.apache.org/devapidocs/org/apache/hadoop/hbase/client/HBaseAdmin.html :이 API를 보면

  1. tableExists
  2. isTableEnabled
  3. isTableAvailable
  4. listTables

# 4를 사용하면 목록을 얻을 모든 테이블 s를 반복하고 물마루를 반복하여 해당 테이블 중 하나가 테이블 이름과 일치하는지 비교하십시오.

다른 방법이 있습니까?

+0

직접 테스트 할 수 있습니까? –

+0

@Matt Ball 내가 한 것처럼, 몇 분 이상 걸립니다. 왜 내가 가장 빠르거나 빠른 방법을 찾고 있는지. – ant

답변

1

HBaseAdmin.tableExists를 사용하면 테이블이 있는지를 확인하는 데 약 500ms 밖에 걸리지 않습니다. 클러스터에는 두 개의 노드 만 있으므로 클러스터 크기에 따라 달라질 수 있지만 무리하지 않습니다.

0

HTable을 테이블에 열려고 시도 할 수 있습니다. 테이블이없는 경우 예외/오류가 발생하지만 (아직 생각할 수 없지만 빠른 테스트를 수행 할 수 없음) 생각할 수 있습니다.

100 % 아니야, 머리 아이디어의 꼭대기에서 떨어져. :)

3
HBaseAdmin hba = new HBaseAdmin(hbaseTemplate.getConfiguration()); 
    if (hba.tableExists(tableName) == false) { 

     HTableDescriptor tableDescriptor = new HTableDescriptor(tableName); 
     HColumnDescriptor columnDescriptor = new HColumnDescriptor(columnFamilyProfile); 
     tableDescriptor.addFamily(columnDescriptor); 

     hba.createTable(tableDescriptor); 
    } 
3

여기 내 샘플 코드입니다.

import org.apache.hadoop.hbase.HBaseConfiguration 

var TableName = "sample" 
val conf = HBaseConfiguration.create() 
var hbaseAdmin = new HBaseAdmin(conf) 
if (!hbaseAdmin.tableExists(TableName)) { 
    println(TableName + " Does Not Exist") 
} 

여기에서 "tableExists"를 사용하여이 TableName의 존재 여부를 확인하기 만하면됩니다.

관련 문제