Apache HBase 리전(Regions)
Apache HBase는 사전순으로 행 키로 정렬된 테이블에 대용량 데이터를 저장한다. 테이블은 여러 지역(Region)에 분산되어 있으며 지역은 여러 RegionServer에 더 분산되어 있다. Apache HBase에서 테이블을 만들면 기본 지역이 할당된다.
Apache HBase 리전은 수평 확장 가능한다. 여기에는 시작 키와 종료 키가 포함되며 해당 행을 기반으로 정렬되고 연속적인 형식으로 저장된다. HBase는 강력한 일관성을 제공하기 때문에 여러 지역에 동일한 행 키를 저장하지 않는다. 리전은 여러 RegionServer에 부하를 분산하며 요구 사항에 따라 부하 분산 및 장애 조치도 수행한다. 데이터가 증가하는 경우 지역이 수동 또는 자동으로 분할된다.
리전 갯수
리전 서버당 중대형(5-20GB) 리전을 소수(20-200개) 사용하는 것이 좋다. 지역의 표준 수는 100개이다.
리전을 고려해야 할 몇 가지 요소를 살펴보겠다.
- 영역 수 선택의 제한 요소는 사용 가능한 힙 공간이다. MemStore에는 리전당 컬럼 패밀리당 거의 2MB가 필요하며 MemStore 힙 공간 요구 사항은 100개의 리전과 리전당 3개의 컬럼 패밀리가 있는 경우 600MB이다. 리전이 적으면 MemStore 힙 요구 사항이 적다.
- 많은 수의 영역은 많은 수의 작은 플러시를 생성한다. 각 플러시가 StoreFile을 만들면 많은 수의 StoreFile이 만들어지므로 더 많은 압축이 필요하다. 또한 MemStore 및 StoreFile 인덱스에는 더 많은 힙 공간이 필요하다.
- 마스터가 RegionServers에 영역을 할당/재할당해야 하므로 많은 수의 영역은 마스터에 부하를 생성한다. 또한 마스터는 로드 밸런싱을 위해 영역을 이동해야 한다.
리전 할당(Region Assignment)
Apache HBase에서 지역은 아래와 같이 마스터에 의해 할당된다.
- 마스터는 할당 관리자를 시작한다.
- 할당 관리자는 hbase:meta 메타데이터에서 기존 할당을 확인한다.
- 할당은 RegionServer 가용성의 경우 저장된다.
- RegionServer가 온라인 상태가 아니면 로드 밸런서가 호출되어 영역을 다른 RegionServer에 할당한다.
- hbase:meta 메타데이터가 새 할당으로 업데이트된다.
리전 장애 조치(Region failover)
RegionServer가 실패할 수 있고 여러 RegionServer가 데이터를 제공하기 때문에 RegionServer의 리전을 사용할 수 없게 될 수 있다. ZooKeeper는 RegionServer 오류를 감지하고 마스터는 지역에 유사한 Row Key가 있는 다른 RegionServer에서 장애 조치를 시작한다.
리전 로컬리티(Region Locality)
Resign Locality는 RegionServer에 대한 지역의 근접성을 나타낸다. 클러스터 전체에서 HDFS 블록 복제를 통해 달성된다.
복제본 배치 정책은 HDFS의 복제본 배치 정책이며 다음과 같다.
- 첫 번째 복제본은 로컬 노드에 배치된다.
- 두 번째 복제본은 다른 랙(rack)의 임의 노드에 배치된다.
- 세 번째 복제본은 두 번째 복제본과 동일한 랙(rack)에 배치되지만 이번에는 다른 노드에 배치된다.
리전의 장점(Benefits of Regions)
리전의 장점은 분산 데이터 저장소, 파티셔닝, 자동 샤딩 및 확장성, 지역 분할이다.
각각 자세히 살펴보겠다.
분산 데이터스토어
분산 데이터 저장소의 설계는 테이블에 여러 리전을 사용하는 Apache HBase의 설계와 일치한다. 노드 클러스터 전체에 더 큰 테이블의 영역을 분산하면 고가용성을 얻을 수 있다.
파티셔닝
데이터 테이블은 여러 지역에 저장되며 지역은 데이터를 분할한다. 이제 해당 테이블의 데이터에 액세스하려면 다른 지역에서 액세스해야 한다. 여러 리전이 있으면 데이터를 빠르게 전달할 수 있다는 이점이 있다.
자동 샤딩 및 확장성
자동 샤딩 프로세스는 영역의 행 키 수가 너무 많아지면 영역을 약 두 개의 절반으로 분할하는 데 사용된다. HBase에서 수평적 확장성의 기본 단위는 리전으로, 리전별로 행을 공유한다.
지역 분할
임계값을 초과하면 영역이 분할된다. 지역을 분할하고 분할된 지역을 오프라인으로 만드는 RegionServer에 의해 처리된다. 그 후 두 개의 분할 영역이 hbase:meta에 추가되고 RegionServer에서 열리고 마스터에 보고된다. 영역 분할은 기본적으로 자동이지만 수동으로 실행할 수도 있다. HBase 영역 분할 정책은 hbase.regionserver.region.split.policy
에서 구성된다.