아키텍처 개요
아키텍처 개요 (Overview)
HBase는 NoSQL 계열의 분산 데이터베이스예요. RDBMS가 제공하는 많은 기능이 없지만, 선형적이면서 모듈식으로 확장되는 강력한 분산 저장소의 특징을 갖추고 있어요. HBase가 어떤 상황에 적합한지, 그리고 Hadoop/HDFS와는 어떤 차이가 있는지 살펴볼게요.
출처: 문서
본문
NoSQL?
HBase는 "NoSQL" 데이터베이스의 한 종류예요. "NoSQL"은 데이터베이스가 SQL을 기본 접근 언어로 지원하는 RDBMS가 아니라는 뜻의 일반적인 용어인데, NoSQL 데이터베이스에도 종류가 아주 많아요. BerkeleyDB는 로컬 NoSQL 데이터베이스의 예시이고, 반면 HBase는 매우 분산적인 데이터베이스예요. 엄밀히 말하면 HBase는 RDBMS에서 볼 수 있는 typed column, 보조 인덱스, 트리거, 고급 질의 언어 등 많은 기능이 없기 때문에 "Data Base"라기보다는 "Data Store"에 더 가까워요.
하지만 HBase에는 선형 확장과 모듈식 확장을 모두 지원하는 많은 기능이 있어요. HBase 클러스터는 상용(commodity) 등급 서버에 호스팅된 RegionServer를 추가하는 방식으로 확장돼요. 예를 들어 클러스터가 10개에서 20개 RegionServer로 확장되면 저장 용량과 처리 용량이 모두 두 배가 돼요. RDBMS도 잘 확장될 수 있지만 한계가 있어요 — 특히 단일 데이터베이스 서버 크기까지이고, 최상의 성능을 위해서는 특수 하드웨어와 저장 장치가 필요해요. HBase의 주목할 만한 기능은 다음과 같아요.
- 강한 일관성 읽기/쓰기: HBase는 "eventually consistent(최종 일관성)" DataStore가 아니에요. 그래서 고속 카운터 집계 같은 작업에 매우 적합해요.
- 자동 샤딩: HBase 테이블은 region을 통해 클러스터에 분산되며, 데이터가 자라면 region이 자동으로 분할되고 재분배돼요.
- 자동 RegionServer 장애 조치 (failover)
- Hadoop/HDFS 통합: HBase는 분산 파일 시스템으로 HDFS를 기본 지원해요.
- MapReduce: HBase는 MapReduce를 통한 대규모 병렬 처리를 지원하며, HBase를 소스와 싱크로 모두 사용할 수 있어요.
- Java Client API: HBase는 프로그래밍 방식 접근을 위한 사용하기 쉬운 Java API를 지원해요.
- Thrift/REST API: HBase는 비-Java 프론트엔드를 위해 Thrift와 REST도 지원해요.
- 블록 캐시와 블룸 필터: HBase는 대용량 질의 최적화를 위해 블록 캐시(Block Cache)와 블룸 필터(Bloom Filters)를 지원해요.
- 운영 관리: HBase는 운영 인사이트를 위한 내장 웹 페이지와 JMX 지표를 제공해요.
HBase를 언제 사용해야 하나요? (When Should I Use HBase?)
HBase는 모든 문제에 적합하지는 않아요.
첫째, 충분한 데이터가 있는지 확인해 보세요. 수억 또는 수십억 개의 행이 있다면 HBase가 좋은 후보예요. 겨우 수천/수백만 행만 있다면, 데이터가 전부 단일 노드(또는 두 개)에 몰리게 되고 나머지 클러스터는 놀고 있을 수 있으므로 전통적인 RDBMS를 쓰는 게 더 나은 선택일 수 있어요.
둘째, RDBMS가 제공하는 추가 기능(예: typed column, 보조 인덱스, 트랜잭션, 고급 질의 언어 등) 없이 살아갈 수 있는지 확인해 보세요. RDBMS 기반으로 만든 애플리케이션은 예를 들어 JDBC 드라이버만 바꾼다고 HBase로 "이식(port)"할 수 없어요. RDBMS에서 HBase로 옮기는 것은 이식이 아니라 완전한 재설계로 생각해야 해요.
셋째, 충분한 하드웨어가 있는지 확인해 보세요. HDFS조차도(HDFS 블록 복제가 기본 3이기 때문에) 5개 미만의 DataNode와 NameNode 하나에는 잘 돌아가지 않아요.
HBase는 랩톱에서도 단독(stand-alone)으로 꽤 잘 돌아갈 수 있어요 — 다만 이건 개발용 설정으로만 생각해야 해요.
HBase와 Hadoop/HDFS의 차이는 무엇인가요? (What Is The Difference Between HBase and Hadoop/HDFS?)
HDFS는 대용량 파일 저장에 잘 맞는 분산 파일 시스템이에요. HDFS 문서는 다만 범용 파일 시스템이 아니며, 파일 안에서 개별 레코드에 대한 빠른 조회를 제공하지 않는다고 밝히고 있어요. 반면 HBase는 HDFS 위에 구축되며 대용량 테이블에 대한 빠른 레코드 조회(및 갱신)를 제공해요. 이것이 가끔 개념적 혼란의 지점이 되기도 해요. HBase는 내부적으로 데이터를 HDFS에 존재하는 인덱싱된 "StoreFile"에 넣어 고속 조회를 지원해요. HBase가 어떻게 목표를 달성하는지에 대한 자세한 내용은 데이터 모델(Data Model)과 이 챕터의 나머지 부분을 참고해 주세요.
더 알아보기 (Learn more)
HBase 아키텍처의 세부 주제인 Catalog Tables, Client, Master, RegionServer, Regions 등 각 하위 문서를 이어서 보시길 권해요.