HDFS으로 구현한 컬림 기반 분산 NoSQL '데이터저장소'로 여러 가지의 NoSQL중 Column-Family model에 속한다. 구글의 BigTable을 기반으로 설계되었으며, HDFS위에서 동작한다.
비정형/반정형 대량 데이터에 대한 분석 처리 지원에 적합하며, 강력한 일관성을 보장한다.
이벤트 로깅, 대규모 sns서비스의 주 스토리지(페이스북 메시지 플랫폼, 라인 메시지 플랫폼)
NoSQL의 종류
- Key-value: Redis, Memcached, AWS DynamoDB
- Document: MongoDB, CouchDB
- Graph: Neo4J
- Column Family: Cassandra, Hbase
Master Server: RegionSever의 모니터링 및 정보 관리. 클라이언트의 읽기/쓰기 요청 처리. 리전 서버에 리전 할당.
Region Server: 수평 확장의 기본 단위. Region서버마다 n개의 Region을 가질 수 있으며, 하나의 Region은 일정 크기 이상 커지면 분리된다. 실제 데이터 저장을 담당하는 서버.
Zookeeper: 클러스터 코디네이터. 활성화된 region과 master서버들과 연결되어 하트비트를 통해서 각 서버의 상태를 관리한다. hbase:meta 카탈로그 테이블(리전 정보 메타 테이블) 위치 관리.
rowkey와 하나 이상의 컬럼으로 구성되어 있다. 정렬의 기준이 된다.
성능 향상을 위해서 컬럼들을 물리적으로 같은 장소에 배치한 것이다.
column family와 column qualifier로 구성되어 있다.
예시) employee:name
row, column-family, column qualifier의 조합.
내부적으로 값과 타임스탬프를 가지고 있다.
값의 버전을 위해 식별자로 활용한다. 기본적으로 데이터가 쓰여질 때 리전 서버 상의 시간을 기록한다.
기본적으로 하나의 테이블은 하나의 리전에 저장된다. 리전이 너무 커지면, Hbase는 이 리전을 두 개의 child 리전으로 나눈다.
Hbase를 잘 사용하기 위해서 튜닝하는 방법
Read 성능을 증진 시키기 위해서는 HFile 수가 적을 수록 좋다. (즉, 한 개의 파일에 데이터가 많이 들어가 있을수록 좋다)
Write 성능을 증진시키려면 compaction을 적게 할 수록 좋다.
HFile은 compaction을 통해 합쳐서 파일의 수를 줄이게 된다. 따라서 이러한 구조를 이해하고 write 성능을 고려해야한다.
Kudu 대비 이점은?
Kudu: OLAP
Hbase: OLTP
대량의 비정형 또는 반정형 데이터를 처리할 수 있는 대기 시간이 짧고 처리량이 많은 데이터 저장소가 필요한 경우 Hbase를 고려할 수 있다.
실 사용예시)
실시간 데이터 처리: HBase는 랜덤 읽기 및 쓰기 작업에 최적화되어 있어 실시간 분석 또는 로그 처리 애플리케이션과 같이 데이터에 빠르게 액세스하고 업데이트해야 하는 사용 사례에 적합합니다.
대규모 데이터: HBase는 매우 많은 양의 데이터를 처리할 수 있는 분산된 칼럼 패밀리 스토어이므로 소셜 미디어 또는 IoT 애플리케이션과 같이 많은 양의 비정형 또는 반정형 데이터를 저장하고 처리해야 하는 사용 사례에 적합합니다.
희소 데이터 처리: HBase는 희소 데이터를 처리하도록 설계되었으므로 테이블의 많은 셀이 비어 있는 경우에도 데이터를 효율적으로 저장하고 검색할 수 있습니다. 따라서 유전체학이나 재무와 같이 데이터가 균일하게 분포되지 않은 사용 사례에 적합합니다.
시계열 데이터: HBase는 타임스탬프를 기반으로 데이터를 저장 및 검색할 수 있으므로 시계열 데이터 분석 또는 모니터링과 같이 시간에 따라 데이터를 저장 및 검색해야 하는 사용 사례에 적합합니다.
WAL -> memstore -> HFile 순으로 write하는 이유?
1) HFile에 매번 변경사항을 바로 쓰면 I/O가 많아져 성능이 떨어지고, 파일 개수가 많아져서 효율적이지 않다.
2) memstore는 메모리 영역이기 때문에 데이터 손실위험이 있음. 그래서 recovery를 위해서 WAL이 존재.