복붙노트

[HADOOP] hbase에서 미리 분할하는 방법

HADOOP

hbase에서 미리 분할하는 방법

5 개 지역 서버가있는 hbase에 데이터를 저장하고 있습니다. 내 행 키로 URL의 md5 해시를 사용하고 있습니다. 현재 모든 데이터는 하나의 지역 서버에만 저장됩니다. 따라서 지역을 미리 분할하여 모든 지역 서버에서 데이터가 균등하게 전달되도록하여 데이터가 각 지역 서버에 균일하게 전달되도록해야합니다. 행 키의 첫 번째 문자로 데이터를 분할하려고합니다. 첫 문자는 0에서 f (16 문자)까지입니다. 행키가 0부터 3까지의 데이터는 1 차 영역 서버에, 3-6은 2에, 6-9는 3 위에, a-d는 4 위에, d-f는 5 위에 놓입니다. 내가 어떻게 해 ?

해결법

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

    1.테이블을 작성할 때 SPLITS 특성을 제공 할 수 있습니다.

    테이블을 작성할 때 SPLITS 특성을 제공 할 수 있습니다.

    create 'tableName', 'cf1', {SPLITS => ['3','6','9','d']}
    

    4 개의 분리 점은 5 개의 영역을 생성합니다.

    HBase의 DefaultLoadBalancer가 regionserver 사이에 100 % 균등 분포를 보장하지 않는다면 regionserver가 동일한 테이블의 여러 영역을 호스팅하는 경우가 발생할 수 있습니다.

    작동 방식에 대한 자세한 내용은 다음을 참조하십시오.

  2. ==============================

    2.모든 데이터가 이미 저장되어 있다면 hbase 쉘을 사용하여 일부 지역을 다른 지역 서버로 수동으로 옮기는 것이 좋습니다.

    모든 데이터가 이미 저장되어 있다면 hbase 쉘을 사용하여 일부 지역을 다른 지역 서버로 수동으로 옮기는 것이 좋습니다.

    hbase> move ‘ENCODED_REGIONNAME’, ‘SERVER_NAME’
    
  3. ==============================

    3.HBase에서 테이블을 생성하기 위해 Apache Phoenix를 사용하는 경우 CREATE 문에 SALT_BUCKETS를 지정할 수 있습니다. 테이블은 언급 된 양동이만큼 많은 영역으로 나뉩니다. Phoenix는 rowkey의 Hash를 계산하고 (아마도 대부분 숫자 해시 % SALT_BUCKETS) 해당 열 셀을 적절한 영역에 할당합니다.

    HBase에서 테이블을 생성하기 위해 Apache Phoenix를 사용하는 경우 CREATE 문에 SALT_BUCKETS를 지정할 수 있습니다. 테이블은 언급 된 양동이만큼 많은 영역으로 나뉩니다. Phoenix는 rowkey의 Hash를 계산하고 (아마도 대부분 숫자 해시 % SALT_BUCKETS) 해당 열 셀을 적절한 영역에 할당합니다.

    CREATE TABLE IF NOT EXISTS us_population (
          state CHAR(2) NOT NULL,
          city VARCHAR NOT NULL,
          population BIGINT
          CONSTRAINT my_pk PRIMARY KEY (state, city)) SALT_BUCKETS=3;
    

    그러면 테이블이 3 개의 영역으로 미리 분할됩니다.

    또는 HBase 기본 UI를 사용하여 영역을 적절하게 분할 할 수 있습니다.

  4. from https://stackoverflow.com/questions/28165833/how-can-i-pre-split-in-hbase by cc-by-sa and MIT license