Apache HBase 개요
HBase란?
Apache HBase 는 미국 아파치 소프트웨어 재단(Apache Software Foundation)이 개발하여 공개하고 있는 오픈 소스 분산형 데이터베이스 관리 시스템이다. 데이터베이스의 주류인 관계형(RDB)과 다른 구조를 가지는, NoSQL 시스템의 하나이다.
미국 구글(Google)사가 개발해 동사 시스템에서 내부적으로 사용하고 있는 “BigTable”(빅 테이블)을 모델로, 이와 유사한 구조나 기능을 가지는 데이터베이스 관리 시스템을 오픈 소스의 소프트웨어로서 재현한 것이다.
마찬가지로 ASF가 개발하여 공개하고 있는 분산 파일 시스템인 HDFS(Hadoop Distributed File System)를 기반으로 데이터베이스를 구축한다. 관계형 데이터베이스와 같이 테이블(테이블)의 형태로 데이터를 구조화하지만, 일반적인 RDBMS 와는 달리 각 컬럼의 값을 한데 모아서 스토리지 상에 기록한다. 이러한 방식을 컬럼 지향형이라고 한다.
테이블의 각 행(row)에는, “쿼리파이어”(qualifier)라고 하는 표지(열명에 해당)와 “셀”(cell)이라고 하는 단위의 데이터(필드 치에 상당)의 페어를 단위로 데이터를 저장한다. 그리고, 복수의 쿼리파이어가 “컬럼 패밀리”(column family)로 그룹화되어 있다. 셀의 데이터는 자동으로 이력 관리되고, 과거의 임의의 시점의 데이터를 호출할 수 있다.
여러 서버 컴퓨터에서 하나의 데이터베이스를 관리하는 분산 환경을 전제로 설계되어 데이터를 여러 노드 에 분산하여 기록하는 샤딩을 자동으로 수행하므로 애플리케이션 측에서 대상을 신경 쓸 필요가 없고, 데이터의 일관성이 강하게 확보되어 처리 도중에 오래된 데이터를 외부로부터 참조되지 않게 되어 있다.
데이터베이스의 조작은 RDB와 같이 SQL이 아닌, Java API나 RESTful API 등에서의 형태로 제공되는 API를 어플리케이션으로부터 호출하는 것으로 수행한다. Apache Hadoop의 MapReduce 등 빅 데이터의 대규모 분산 처리 등에 적합하다.
HBase는 SQL 데이터베이스를 대체하는 솔류션이 아니지만 Apache Phoenix와 같은 소프트웨어를 이용해서 SQL 레이어를 올릴 수 있다. SQL 레이어를 올리면 JDBC 드라이버 등을 사용해서 다양한 분석 작업을 (익숙한 방법으로) 쉽게 처리 할 수 있다.
HBase 히스토리
년도 | 이벤트 |
---|---|
2006년 11월 | Google은 BigTable에 논문을 발표하였다. |
2007년 2월 | 초기 HBase 프로토타입은 Hadoop 기여로 생성되었다. |
2007년 10월 | Hadoop 0.15.0과 함께 사용 가능한 최초의 HBase가 출시되었다. |
2008년 1월 | HBase는 Hadoop의 하위 프로젝트가 되었다. |
2008년 10월 | HBase 0.18.1이 릴리스되었다. |
2009년 1월 | HBase 0.19.0이 릴리스되었다. |
2009년 9월 | HBase 0.20.0이 출시되었다. |
2010년 5월 | HBase는 Apache 최상위 프로젝트가 되었다. |
2010년 6월 | 첫 개발자 버전인 HBase 0.89.20100621이 출시되었다. |
2011년 1월 | HBase 0.90.0 버전이 출시되었다. |
2011년 중반 | HBase 0.92.0 버전이 출시되었다. |
HBase 특징
Apache HBase의 몇 가지 중요한 특성이다.
분산 (Distributed)
가상 분산(Pseudo-distributed) 모드와 완전 분산(Fully distributed) 모드라는 두 가지 모드에서 Apache HBase를 실행할 수 있다. 가상 분산 모드는 테스트 목적으로 사용되며, 단일 노드에서 실행되는 반면 완전 분산 모드는 프로덕션 환경에서 사용되며 노드 클러스터에서 실행된다.
빅데이터 저장소
Apache HBase는 수십억 개의 행과 수십억/수백만 개의 열이 있는 테이블에 매우 큰 데이터를 저장하도록 설계되었다. Hadoop HDFS 위에서 실행되므로 대기 시간이 짧고 데이터에 대한 실시간 읽기 및 쓰기가 가능하다. 테이블에 저장된 방대한 데이터에 대한 읽기 작업에 더 나은 성능을 제공한다.
비관계형 (Non-Relational)
이미 알고 있듯이 Apache HBase는 비관계형 데이터베이스이므로 관계형 데이터베이스 모델을 따르지 않는다. 관계형 데이터베이스 관리에서 데이터는 행과 열의 형태로 테이블에 저장된다. 해당 데이터에 액세스하려면 SQL 언어를 사용할 수 있지만 Apache HBase의 경우 데이터 스토리지가 고정 형식이 아닌 스토리지 및 쿼리 메커니즘을 사용한다. Apache HBase에서 스키마는 유연하며 요구 사항에 따라 확장할 수 있다.
유연한 데이터 모델
Apache HBase는 테이블에 데이터를 저장할 수 있는 유연한 데이터 모델을 제공한다. 테이블에는 하나 이상의 column family가 있다. 사용자의 데이터는 키/값 쌍의 모음인 행에 저장된다. 테이블에서 행은 행 키로 고유하게 식별된다.
확장 가능 (Scalable)
Apache HBase 리전은 행이 지역별로 공유되는 수평 확장 가능하다. 테이블은 여러 영역에 저장될 수 있으며 영역이 매우 커지면 데이터가 동일한 중간 행 키를 기준으로 두 영역으로 분할된다.
HBase의 기능
Apache HBase의 기능은 다음과 같다.
- 선형 및 모듈식 확장성을 지원한다.
- 읽기와 쓰기의 엄격한 일관성을 제공한다.
- 자동 및 구성 가능한 테이블 샤딩을 제공한다.
- RegionServer 간에 자동 장애 조치(fail over) 지원을 제공한다.
- Apache HBase 테이블로 Hadoop MapReduce 작업을 지원하기 위한 편리한 기본 클래스를 지원한다.
- 클라이언트 액세스를 위해 Java API를 쉽게 사용할수 있다.
- 실시간 쿼리를 위한 블록 캐시 및 블룸 필터를 제공한다.
- 서버 사이드 필터를 통해 쿼리 조건자 푸시 다운을 제공한다.
- 확장 가능한 JRuby 기반(JIRB) 쉘을 제공한다.
HBase 장단점
HBase 장점
- 대용량의 데이터를 안정적으로 다루는데 효과적이다.
- 중앙의 전체 분산 시스템을 통제하는 마스터를 두고 전체 데이터의 일관성을 관리하여 복제 데이터 사이의 일관성을 보장한다.
- 대량의 데이터 분석 처리 지원에 적합하다.
- MapReduce의 input으로 사용하기 편하다.
- HDFS, mapreduce등과 함께 사용하기에 최적화
- 성능 이슈가 발생할 경우, Region 서버만 추가하면 성능 유지할 수 있디.
- Fail over가 쉽고 관리가 용이하다.
HBase 단점
- MapReduce의 input으로 사용하기 편하나, 동시에 파일 input과 같이 사용시 CPU 사용률이 높아 Region 서버가 쉽게 Down 된다.
- 적절한 HBase setting을 하기 위한 조건에 대한 자료가 있으나, Cluster의 규모나 기본 Spec 차이가 있어 바로 적용하기가 쉽지 않다.
- 특정 Region 서버에 특정 table의 region이 집중되기 쉬우며, 이는 성능 저하로 이어진다.
- 구성 시 HBase의 적절한 설계가 필요하다.
RDBMS와 HBase의 차이점
관계형 데이터베이스와 HBase의 주요 차이점을 살펴보겠다.
RDBMS | HBase |
---|---|
테이블을 데이터베이스로 사용한다. | 지역(region)을 데이터베이스로 사용한다. |
지원되는 파일 시스템은 FAT, NTFS 및 EXT이다. | 지원되는 파일 시스템은 HDFS이다. |
커밋 로그를 사용하여 로그를 저장한다. | WAL(Write-Ahead Logs)을 사용하여 로그를 저장한다. |
사용되는 참조 시스템은 좌표 시스템(coordinate system)이다. | ZooKeeper에서 사용되는 참조 시스템이다. |
기본 키를 사용한다. | Row key 를 사용한다. |
파티셔닝이 지원된다. | 샤딩이 지원된다. |
Row, Column, Cell 사용. | Row, Column family, Column, Cell 사용. |
HDFS와 HBase의 차이점
HDFS와 HBase의 주요 차이점을 살펴보겠다.
HDFS | HBase |
---|---|
HDFS는 분산 저장을 위한 파일 시스템을 제공한다. | HBase는 테이블 형식의 열 기반 데이터 스토리지를 제공한다. |
HDFS는 대용량 파일에 최적화된 스토리지를 제공한다. | HBase는 테이블 형식 데이터에 대한 최적화를 제공한다. |
플랫 파일을 사용한다. | 키-값 쌍의 데이터를 사용한다. |
데이터 모델은 유연하지 않다. | 유연한 데이터 모델을 제공한다. |
파일 시스템과 처리 프레임워크를 사용한다. | Hadoop MapReduce 지원이 내장된 테이블 형식 스토리지를 사용한다. |
대부분 write-once-read-many에 최적화되어 있다. | 많은 읽기/쓰기 모두에 최적화되어 있다. |
행 기반 데이터 저장소와 열 기반 데이터 저장소의 차이점
행 기반(Row-oriented) 데이터 저장소와 열 기반(Column-oriented) 데이터 저장소의 주요 차이점을 살펴보겠다.
행 기반 데이터 저장소 | 열 기반 데이터 저장소 |
---|---|
행 기반 데이터 저장소는 레코드 추가/수정에 효율적이다. | 열 기반 데이터 저장소는 데이터 읽기에 효율적이다. |
그들은 전체 행을 포함하는 페이지를 읽는다. | 필요한 열만 읽는다. |
OLTP 시스템에 가장 적합하다. | 아직 OLTP 시스템에는 적합하지 않다. |
행의 전체 값을 직렬화합니다. | 열의 전체 값을 직렬화합니다. |
메모리의 연속 페이지에 행을 저장한다. | 페이지의 열을 메모리에 저장한다. |
OLTPOnline Transactional Processing)란? 온라인 트랜잭션 처리를 말하며, 네트워크 상의 온라인 사용자들의 Database 에 대한 일괄 트랜잭션 처리를 의미한다.
열 기반 데이터베이스의 장단점
열 기반 데이터베이스의 장단점을 살펴보겠다.
장점
- 효율성 및 데이터 압축에 대한 지원 기능이 내장되어 있다.
- 빠른 데이터 검색을 지원한다.
- 열 기반 데이터베이스에서는 관리 및 구성이 단순화된다.
- 집계 쿼리(예: COUNT, SUM, AVG, MIN 및 MAX)에 대한 고성능에 적합하다.
- 더 큰 영역을 더 작은 영역으로 분배하는 자동 샤딩 메커니즘의 기능을 제공하므로 파티셔닝에 효율적이다.
단점
- JOIN 여러 테이블의 쿼리 및 데이터가 최적화되지 있지 않다.
- 빈번한 삭제 및 업데이트를 위해 분할을 생성해야 하므로 스토리지 효율성이 감소한다.
- 비관계형 특성상 파티션과 인덱스 설계가 매우 어렵다.
HBase 사용 사례
- 데이터 일관성을 보장하기 위해 사용하거나 분석등의 용도로 사용
- ex.Facebook, EBay, Adobe, LINE, etc
- 감시 체계(Monitoring system).
- 사용자 작업 추적(Tracking user actions).
- 감사 로깅 시스템(Audit logging systems).
- 실시간 분석(Real-time analytics).
- Hadoop을 사용하여 대량 데이터를 분석해야 하는 경우
- 대규모 SNS 서비스의 주 스토리지로 이용
- 메시지 중심 시스템(Twitter와 유사한 메시지 및 상태).
- HBase에서 콘텐츠를 제공하는 콘텐츠 관리 시스템.
- 웹 크롤링 중 웹 페이지 저장과 같은 표준 사용 사례.