복붙노트

[HADOOP] hbase API를 사용하여 지역 이름을 얻는 올바른 방법

HADOOP

hbase API를 사용하여 지역 이름을 얻는 올바른 방법

HBase API를 사용하여 "테이블"에 대한 "지역 이름"을 가져 오려고합니다.

설정은 다음과 같습니다.

Hbase에는 테스트 용 테이블이 거의 없습니다. 사용 가능한 지역에 대한 정보는 웹 UI에서 아래에 표시됩니다.

"test_table"테이블에 해당하는 "지역 이름"이 의도적으로 강조되었습니다.

이제 아래 코드를 사용하여 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이 실행될 때마다 다르게 반환됩니다.

런 1 :

test_table,,1419247657866.77b98d085239ed8668596ea659a7ad7d.

런 2 :

test_table,,1419247839479.d3097b0f4b407ca827e9fa3773b4d7c7.

런 3 :

test_table,,1419247859921.e1e39678fa724d7168cd4100289c4234.

"region_name"을 생성하기 위해 잘못된 방법을 사용하고 있거나 접근 방식이 잘못되었다고 가정합니다. 주어진 테이블 이름에 대한 지역 정보를 얻도록 도와주세요.

해결법

  1. ==============================

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

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

    getTableRegions (최종 테이블 이름 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();
        }
    }
    

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

  2. from https://stackoverflow.com/questions/27602013/correct-way-to-get-region-name-by-using-hbase-api by cc-by-sa and MIT license