4학년 공부 과정/분산 데이터베이스

하둡(Hadoop) - HBase - 2

환성 2023. 5. 24. 19:26
728x90

HBase HMaster

  • Region Server는 각 테이블의 데이터를 관리한다.
  • HMaster
    • 전체 클러스터를 관리하고 Region Server를 조정한다.
    • Region Server 조정이란 로드 밸런싱을 위해서 Region을 재할당하거나 복구하는 일을 수행한다.
    • 클러스터에 있는 모든 Region Server들을 주키퍼를 사용해 모니터링한다.
    • 로드 밸런싱 : 서버가 처리해야 할 업무 혹은 요청(Load)을 여러 대의 서버로 나누어(Balancing) 처리하는 것을 의미한다.
    • 너무 많은 로드 밸런싱도 문제가 발생할 수 있다(불균형의 문제 초래)

HBase HMASTER

  • 주키퍼를 이용해 클러스터 서버 상태를 관리하고 서비스들이 살아 있는지 사용 가능한지 모니터링 하고 실패 할 시 알림이 간다
  • 클러스터간의 정보공유를 위한 저장소역할을 하며 보통 3대, 5대로 주키퍼 클러스터로 구성된다.
  • Region Server, HMaster는 주키퍼에 연결되고 Heartbeat를 통해서 상태를 모니터링한다.
  • 문제가 발생 시 클러스터에서 제외, HMaster가 실패할 경우 Master/Slave 방식으로 복제된 Inactive HMaster를 활성화한다.

 

Zookeeper는 Heartbeat를 보내 상태 확인

 

HBase META 테이블

HBase META 테이블

  • META 테이블은 클러스터에 있는 모든 Region 정보를 저장한다.
  • META 테이블의 구조는 Key-Value 쌍의 B-Tree형태로 구성된다.
    • (Key, Value) => (Region ID 테이블, Region 서버)

 

HBase Region Server Component

 

HBase Region Server Component

  • WAL : Write Ahead Log 파일로 HDFS에 기록되고, 모든 데이터는 영구이다.
  • BlockCache : 읽기 캐시, 자주 접근하는 데이터를 메모리에 저장하여 읽기 성능을 향상시킨다.
  • MemStore : 쓰기 캐시, 아직 디스크에 기록되지 않은 데이터를 저장한다.
  • Hfile : Key-Value 형태로 데이터를 저장하는 파일

 

 

HBase 데이터 쓰기/읽기

쓰기 과정

  1. HBase에 데이터 적재 요청이 오면 먼저 적절한 Region Server을 찾게 된다.
  2. Region Server를 찾아 commit log를 추가 하고 메모리 내의 Memstore에 추가하게 된다.
  3. Memstore에 저장되어 있던 데이터는 설정되어 있는 설정값에 따라 가득차게 되면 HFile 형태로 디스크에 Flush되고 메모리를 비우고 다시 요청을 기다리게 되고 WAL 또한 이에 대한 기록을 하게 된다.

 

읽기 과정

  1. HBase에 요청이 들어오는 경우 먼저 Memstore를 살펴보게 되는데, Memstore에서 원하는 데이터를 찾으면 해당 데이터를 반환하게 된다.
  2. 그렇지 않은 경우 최근 Flush된 파일부터 오래된 순으로 쿼리를 만족하는 적합한 데이터를 발견하거나 더 이상 Flush 파일이 없을때까지 반복하게 된다.

 

 

HBase MemStore

HBase MemStore

  • Key/Value 데이터를 정렬해서 저장하고, 이 데이터를 그대로 HFile에 저장한다.
  • 하나의 컬럼 패밀리당 하나의 MemStore가 존재한다.

 

 

 

HBase Regin Flush

HBase Regin Flush 과정

  • Memstore에 충분한 데이터가 쌓이면, 정렬된 전체 집합을 HDFS에 새로운 HFile을 만들어서 저장한다.
  • 컬럼패밀리가 늘어나면 HFile이 늘어나기 때문에, 컬럼 패밀리 수는 제한된다.

 

 

HBase Compaction

Minor Compaction

  • Minor Compaction은 작은 HFile 파일들을 하나로 합치는 과정이다.
  • 여러 개의 작은 HFile들이 생성되면 갯수가 많아지게 되어 데이터를 탐색하는 시간이 증가하여 성능이 저하될 수 있다.
  • 여러 개의 HFile들이 병합하여 소수의 큰 HFiles로 생성함으로써 데이터 탐색 속도를 줄일 수 있다.
  • minor compaction은 hbase.hstore.compaction.min / hbase.hstore.compaction.max 값으로 주기를 설정할 수 있다.
  • hbase.hstore.compaction.min : minor compaction을 수행하기 위한 최소 StoreFile 수 기본값 3이다.
  • hbase.hstore.compaction.max : minor compaction이 일어날 때, 처리하는 최대 StoreFile 갯수 기본값 10이다.

 

Major Compaction

  • Region에 있는 모든 HFile들을 병합해서 컬럼 패밀리 하나에 Hfile 하나 생성한다.
  • 병합 과정에서 필요없는 셀, 시간이 초과된 셀 등을 제거하고 대량의 파일들에 대한 읽기/쓰기 작업이 일어나기 때문에 디스크 I/O와 트래픽 증가 발생한다.
  • 서비스에 미치는 영향을 최소화하기 위해서 주말이나 야간으로 스케줄링이 가능하고 서버에 많은 부하가 생길 수 있어 자주 수행하는 것은 좋지 않다.

 

 

HBase Region Split

HBase Region Split

  • 하나의 테이블은 하나의 Region에 저장된다.
  • Region이 특정 크기 이상 커지면 Region을 두 개의 child Region으로 분할한다.
  • Region을 나누어야 할 경우 이 정보를 HMaster에 보고하고, HMaster는 로드를 조정하기 위해서 새 Region을 다른 서버로 이동하기 위한 작업을 수행한다.

 

HBase Read Load Balancing

HBase Read Load Balancing

  • Region split후 바로 HFile을 다른 노드로 이동하지 않는다.
  • Region 서버만 다른 노드에 위치시키고 HFile의 물리적인 이동은 compaction 시에 수행한다.

 

 

 

HBase Crash Recovery

  • 주키퍼는 Heart Beat 를 이용하여 Region 서버의 고장 여부 판단한다.
  • Region Server가 고장이 나면 HMaster에 이를 통보하고 HMaster는 고장이 발생한 Region Server 의 Region을 다른 Region Server에 할당한다.
  • 복제된 WAL 블록들을 이용하여 고장이 발생한 서버의 Memstore의 데이터 복구한다.
  • 복제된 WAL 블록들을 분할하여 Region Server들에 복제해서 저장하고 각 Region서버는 데이터노드에 저장된 WAL 블록들을 이용하여 Memstore 복구한다.

 

 

Recovery 과정