2014-12-22 1 views
2

HBase API를 사용하여 "테이블"에 대해 "지역 이름"을 가져 오려고합니다.hbase API를 사용하여 지역 이름을 가져 오는 올바른 방법

셋업은 아래에 언급되어

  1. HBase와 의사 분산 설치 (버전 0.98.7)를.

  2. 하둡 2.5.1 설치.

테스트 용 테이블이 매우 적습니다. 사용 가능한 지역에 대한 정보는 아래 웹 UI에서 볼 수 있습니다. "test_table"테이블에 대응

enter image description here

"지역 명"의도적으로 강조되고있다.

이제 아래 코드를 사용하여 hbase의 Java 기반 API에서이 지역 정보를 얻으려고했습니다.

void scanTable(String tabName){ 

     org.apache.hadoop.conf.Configuration config = HBaseConfiguration.create(); 
     try{ 
      HTable table = new HTable(config, tabName); 
      org.apache.hadoop.hbase.TableName tn = table.getName(); 

      HRegionInfo hr = new HRegionInfo(tn); 
      System.out.println(hr.getRegionNameAsString()); 

      table.close(); 
     }catch(Exception ex){ 
      ex.printStackTrace(); 
     } 
    } 
} 

"test_table"과 같이 테이블 이름을 전달할 때마다 regionName이 모든 실행마다 다르게 반환됩니다.

RUN 1 :

test_table,,1419247657866.77b98d085239ed8668596ea659a7ad7d. 

RUN 2 :

test_table,,1419247839479.d3097b0f4b407ca827e9fa3773b4d7c7. 

RUN 3 :

test_table,,1419247859921.e1e39678fa724d7168cd4100289c4234. 

내가 "REGION_NAME"또는 내 접근 방식을 생성하는 잘못된 방법을 사용하고 있다고 가정 잘못된 것입니다. 주어진 테이블 이름에 대한 지역 정보를 얻는 것을 도와주십시오.

답변

3

HBaseAdmin에는 원하는 테이블 이름에 대한 모든 영역 정보를 반환하는 getTableRegions()가 있습니다.

목록 getTableRegions (최종 TABLENAME TABLENAME)

는 아래 주어진 표 이름 영역 이름을 출력하는 방법이다.

void getRegionOfTable(String tabName){ 
    org.apache.hadoop.hbase.TableName tn = org.apache.hadoop.hbase.TableName.valueOf(tabName); 
    org.apache.hadoop.conf.Configuration config = HBaseConfiguration.create(); 
    HRegionInfo ob; 
    try{ 
     HBaseAdmin hba = new HBaseAdmin(config); 
     List<HRegionInfo> lr = hba.getTableRegions(tn); 
     Iterator<HRegionInfo> ir = lr.iterator(); 
     while(ir.hasNext()){ 
      ob = ir.next(); 
      System.out.println(ob.getRegionNameAsString()); 
     } 
     hba.close(); 
    }catch(Exception ex){ 
     ex.printStackTrace(); 
    } 
} 

매번 다른 타임 스탬프로 새로운 "지역"을 작성하기 때문에 코드가 매번 다른 결과를 생성합니다. 또한이 코드는 테이블에 단일 영역이 있다고 가정합니다.

+0

Thanks @ th30z. 올바른 지역 이름을 얻는 다른 방법을 찾았지만 작동합니다. 지역 이름을 출력하는 완전한 자바 메소드로 답을 업데이트하겠습니다. :) – Rohit

+0

또한 0.96 이하 버전에서는 작동하지 않습니다. org.apache.hadoop.hbase.TableName은 0.96 / –

관련 문제