복붙노트

[HADOOP] API를 통해 Hbase 리전 크기 가져 오기

HADOOP

API를 통해 Hbase 리전 크기 가져 오기

리전 수 및 / 또는 리전 크기 (storeFile 크기의 합)에 따라 리전 서버 전체의 리전 균형을 조정할 수있는 Hbase 용 밸런서 도구를 작성하려고합니다. 리전 크기 또는 관련 정보를 반환하는 Hbase API 클래스를 찾을 수 없습니다. 다른 테이블 / 지역 정보를 얻는 데 사용할 수있는 몇 가지 클래스를 이미 확인했습니다. org.apache.hadoop.hbase.client.HTable 및 HBaseAdmin.

필자가 생각할 수있는 또 다른 방법은 fileSystem의 디렉토리 크기를 반환하는 Hadoop 클래스 중 하나를 사용하는 것입니다. org.apache.hadoop.fs.FileSystem은 특정 HDFS 경로 아래에 파일을 나열합니다.

어떤 제안?

해결법

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

    1.이 기능을 사용하여 관리되는 리전 분할을 수행 할 수 있지만이를 활용하여 자체로드 밸런싱 할 수 있습니다. 또한 MR 작업이 균등하게 분산되도록 노드 전체에 지역 (지정된 테이블의) 영역을 균등하게 분산시키기 위해로드 밸런싱을 수행했습니다.

    이 기능을 사용하여 관리되는 리전 분할을 수행 할 수 있지만이를 활용하여 자체로드 밸런싱 할 수 있습니다. 또한 MR 작업이 균등하게 분산되도록 노드 전체에 지역 (지정된 테이블의) 영역을 균등하게 분산시키기 위해로드 밸런싱을 수행했습니다.

    아마도 아래의 코드 스 니펫이 유용합니까?

    final HBaseAdmin admin = new HBaseAdmin(conf);
    final ClusterStatus clusterStatus = admin.getClusterStatus();
    
    for (ServerName serverName : clusterStatus.getServers()) {
      final HServerLoad serverLoad = clusterStatus.getLoad(serverName);
    
      for (Map.Entry<byte[], HServerLoad.RegionLoad> entry : serverLoad.getRegionsLoad().entrySet()) {
        final String region = Bytes.toString(entry.getKey());
        final HServerLoad.RegionLoad regionLoad = entry.getValue();
        long storeFileSize = regionLoad.getStorefileSizeMB();
        // other useful thing in regionLoad if you like
      }
    }
    
  2. ==============================

    2.기본로드 밸런서에 어떤 문제가 있습니까?

    기본로드 밸런서에 어떤 문제가 있습니까?

    위키에서 :

    밸런서는 마스터에서 실행되어 클러스터의 영역을 재분배하는 주기적 작업입니다. hbase.balancer.period를 통해 구성되며 기본값은 300000 (5 분)입니다.

    정말로 직접하고 싶다면 실제로 Hadoop API와 더 구체적으로는 FileStatus 클래스를 사용할 수 있습니다. 이 클래스는 파일의 클라이언트 측 정보를 나타내는 인터페이스 역할을합니다.

  3. from https://stackoverflow.com/questions/14573466/get-hbase-region-size-via-api by cc-by-sa and MIT license