HBase 구성

구성

HBase는 Master 서버와 Region 서버의 두 가지 유형의 서버로 구성된다.
Region 서버를 증설하는 것으로 간단하게 스케일 아웃 할 수 있는 구조가 되고 있다. HBase 의 데이터는 리전이라고 하는 단위로 분할되어 있어 리전의 취급 방식으로 서버의 종류가 나뉘어 진다.

마스터 서버

HBase의 모든 데이터(리전)가 어느 Region 서버에 저장되어 있는지 메타 정보를 관리하는 서버이다.
Region 서버에 지역을 할당하고 Region 서버에 장애를 감지한다.
그런데 이러한 작업은 Master 서버 내에서 움직이고 있는 ZooKeeper라는 소프트웨어가 담당하고 있다.
ZooKeeper는 HBase 외에도 많은 분산 애플리케이션에서 사용되는 소프트웨어이다.

Region 서버

마스터 서버에서 할당된 리전을 저장하는 서버이다.
클라이언트는 먼저 Master 서버(정확하게는 ZooKeeper)에 문의를 하여 대상의 데이터(리전)를 보존하고 있는 Region 서버의 위치를 알려준다.
그런 다음 해당 Region 서버가 클라이언트의 요청을 담당한다.
리전은 항상 단일 Region 서버에서 관리되며 읽기 및 쓰기를 위해 데이터 일관성을 유지한다.
Region 서버가 다운되면 할당 된 지역은 다른 Region 서버로 장애 조치된다. (이 작업은 Master 서버에서 수행)
그러나 장애 조치가 완료될 때까지 클라이언트는 대상 리전에 읽고 쓸 수 없다.

데이터 구조

HBase 테이블에는 형식이 없으며 바이트 배열(byte[ ])로 저장된다.
HBase 행은 고유한 행 키로 오름차순으로 정렬되며 테이블의 값을 읽고 쓸 때 이 행 키를 통해 수행된다.
앞에서 언급했지만 HBase에서 관리하는 데이터는 일정 범위마다 리전이라는 단위로 분할되어 있으며 테이블에는 여러 리전이 있다. 또한 HBase 열은 열 패밀리라는 단위로 그룹화된다.
테이블의 데이터는 리전별로 나뉘어지고, 열 패밀리마다 나뉘어져 파일로 내보내진다. 파일은 별도이거나 ​​동일한 리전이면, 동일한 Region 서버에 저장된다.

HBase Table

HBase 데이터(셀 값)에는 각각 타임스탬프가 부여되어 있어 버전을 관리하고 있다. 파일은 다음과 같은 형식으로 저장된다.

행(행 키): 열 패밀리: 열: 타임스탬프: 값

HBase 쓰기

HBase는 쓰기를 할 때는 먼저 Region 서버의 MemStore에 데이터를 쓴다.
MemStore는 Region 서버의 메모리 영역이며, 캐시와 같은 기능을 한다. 그리고, MemStore의 데이터가 일정량 모인 곳에서 디스크상에 HFile 로서 데이터를 내보내서 영속화한다.
그러나 HFile으로 내보내기 전의 데이터는 서버의 메모리 (MemStore)에 저장되어 있기 때문에 서버가 다운되면 사라진다. 따라서 HBase는 HLog라는 데이터를 쓸 때 로그를 남기고 서버가 다운되면 HLog를 바탕으로 데이터를 복구 할 수 있다.