HBase에 대해서 간단히 알아보자!


HBase?

HBase에 대해서는 무엇보다도 HBase 홈페이지(http://hbase.apache.org)가 가장 정확하게 설명하고 있을 것 같다.

Apache HBase™ is the Hadoop database, a distributed, scalable, big data store.
(
Apache HBase™는 분산되고 확장 가능하면서 큰 데이터를 저장하기 위한 Hadoop Database이다.)

HBase 홈페이지에는 다음과 같은 좀 더 상세한 설명도 있다.

Apache HBase is an open-source, distributed, versioned, column-oriented store modeled after Google's Bigtable.
(Apache HBase는 구글의 Bigtable 모델을 따르는 오픈소스 분산되고 버전화 되어있는 컬럼 기반의 저장소이다.)

그렇다면 HBase를 이해하기 위해서는 구글의 BigTable에서 시작해야 할 것 같다.

구글의 Bigtable에 대해서 설명한 논문(http://research.google.com/archive/bigtable.html)에서 Data Model에 대한 설명을 보면 다음과 같다.

A Bigtable is a sparse, distributed, persistent multidimensional sorted map. The map is indexed by a row key, column key, and a timestamp.

Bigtable Data Model의 특징은 sparse, distributed, persistent multidimensional sorted map 이라고 할 수 있다. 

그렇다면 각 특징에 대해서 간단히 알아보면 다음과 같다.

sparse

sparse라는 영어 단어는 "밀도가 희박한"이라는 뜻을 가지고 있다. 뜻도 어려울 뿐만 아니라 발음할때도 r 발음에 주의해야 한다! 스파~ㄹ스라고 해야 하지만 영국식 발음은 스파스 해도 무난하다고 한다. (거꾸로 읽어도 스파스가 된다!)
아무튼.. 밀도가 희박하다는 특징이라고 하면 잘 떠오르지 않는다. 만약 "밀도가 희박하다"는 단어만으로 설명하려 하면 다음과 같은 사태가 발생할 수 있다.

개똥이 : 구글의 Bigtable의 특징은 sparse하다는 거야!
소똥이 : sparse가 무슨 뜻인데?
개똥이 : 밀도가 희박하다는 뜻이야!
소똥이 : ♨_♨ ㅅㅂ (  )(  )(  )(  )!!!

마지막 대사의 괄호 안을 채워넣으려 노력하지 말고 sparse하다는 말에 좀 더 집중해보도록 하자. sparse라는 단어와 관련된 것을 생각해보면 "sparse matrix(희소행렬)"라는 단어가 떠오를 것이다!

sparse matrix(희소 행렬)의 모습은 아래와 같다.

 

col #1 

col #2 

col #3 

col #4 

col #5 

col #6 

col #7 

... 

col #n 

 row #1

 

 

 

 

 

 

 

 

 13

 row #2

 

 

 8

 

 

 

 

 

 

 row #3

 

 

 

 

 

 

 

 

 row #4

 5

 

 

 

 

 

 

 

 

 row #5

 

 

 

 

 

 

 

 

 

 row #6

 1

 

 

 

 

 

 

 

 row #7

 

 

 

 

 

 

 

 

 

 ...

 

 

 

 

 

 

 

 

 

 row #m

 

 

 

 

 

 

 

 

이와 같이 대부분의 항목이 비어있거나 0의 값을 가지는 행렬을 sparse matrix(희소 행렬)이라 한다. Bigtable의 sparse하다는 특징은 정형화된 테이블에 대부분의 값이 들어가있는 모습이 아닌 sparse matrix의 데이터 구성과 유사하다는 것을 의미한다.


distributed

distributed라는 영어 단어는 "분산된"이라는 뜻을 가지고 있다. 흔히 사용되는 단어이고 말 그대로 데이터가 분산되어 관리된다는 것을 의미한다.


persistent multidimensional sorted map

각 단어의 의미를 알아보면 다음과 같다.

persistent = 지속적인
multidimensional = 다차원의
sorted = 정렬된
map = 지도

persistent라는 단어는 "지속적인"으로 해석되어 메모리 같은 휘발성 저장소가 아닌 하드 디스크와 같은 비휘발성 저장소에 저장된다고도 해석될 수 있다. 하지만 여기서 말하는 persistent라는 속성은 persistent data structure를 나타내는 것이다. persistent data structure는 데이터의 version이 관리되는 데이터 구조를 의미한다.

multidimensional은 말 그대로 다차원을 의미한다. Bigtable의 데이터 모델의 다차원은 row key, column key, timestamp를 의미한다.

sorted 또한 말 그대로 정렬되었다는 것을 의미한다. 

데이터에 대해서 얘기하면서 map을 "지도"라고 해석하는 사람은 없을 것으로 생각한다. 자료구조에서 말하는 map 형태의 데이터를 의미한다.

각 단어에 대한 이해를 했다면 이제 각 단어를 조합하는 응용을 해보면 다음과 같다. 

persistent    multidimensional    sorted    map
~~~~~~    ~~~~~~~~~~     ~~~~   ~~~
  형용사            형용사             형용사   형용사

※ 아래와 같은 순서로 해석한다.

1단계) sorted map = 정렬된 map
2단계) multidimensional sorted map = 다차원의 정렬된 map
3단계) persistent multidimensional sorted map = 데이터의 버전이 관리되는 다차원의 정렬된 map


그렇다면 이제 HBase의 데이터 모델에 대해서 알아보자. 그냥 알아보면 재미없으니 Perl을 사용해서 표현해보면 다음과 같다.

$bigtable = "A Bigtable is a sparse, distributed, persistent multidimensional sorted map. The map is indexed by a row key, column key, and a timestamp.";

$hbase = $bigtable =~ s/bigtable/HBase/gir;

요약하자면.. Bigtable에 대한 설명에서 "Bigtable"이라는 단어를 "HBase"로 변경하면 된다.

이제 HBase에 대해서 정의해보자.

HBase는 분산되고 확장 가능하면서 큰 데이터를 저장하기 위한 Hadoop Database이다.

HBase의 데이터 모델은 희소 행렬과 유사한 데이터 구성을 가지면서 분산되어있고 데이터의 버전이 관리되는 다차원(rowkey, column key, timestamp)의 정렬된 map이다. 


참고자료


Posted by micacute
TAG ,