HBase - 데이터 모델 이해 정리

Posted 11 8, 2015 19:10, Filed under: BigData/HBase


# HBase 데이터 모델 정리


HBase 데이터 모델 개요
 * 테이블(Table) : HBase는 데이터를 테이블에 조직화한다.
   테이블 이름은 스트링(String)이다. 그리고 파일 시스템의 경로로 사용해도 안전한 문자로 구성되어 있다.

 * 로우(Row) : 테이블 내에 있고, 데이터는 테이블의 로우에 따라 저장된다.
    로우는 로우키(rowkey)에 의해 유일하게 식별된다. 로우키는 데이터 타입을 가지고 있지 않고 byte[]로 취급된다.

 * 칼럼 패밀리(Column Family) :  로우 내에 있는 데이터는 칼럼 패밀리에 의해 그룹화된다.
    칼럼 패밀리는 또한 HBase 내의 데이터 저장을 위한 물리적 처리방식에 영향을 준다.
    이러한 이유 때문에 그들은 먼저 정의되어야 하고 쉽게 변경할 수 없다.
    칼럼 패밀리에 데이터를 저장할 필요가 없다고 해도 테이블의 모든 로우는 동일한 칼럼 패밀리를 가진다.
    칼럼 패밀리 이름은 스트링(String)이고 파일 시스템의 경로 상에서 안전하게 사용할 수 있는 문자로 구성되어야 한다.

 * 칼럼 한정자(Column Qualifier) : 칼럼 패밀리 내의 데이터는 칼럼 한정자 또는 간단히 칼럼을 통해서 표현된다.
    칼럼 한정자는 사전에 지정될 필요가 없다. 칼럼 한정자는 로우 사이에 일관성이 있을 필요가 없다.
    로우키와 같이 칼럼 한정자는 칼럼 타입을 가지지 않고 항상 byte[]로 다루어진다.

* 셀(Cell) or 값(Value) : 로우키와 칼럼 패밀리, 칼럼 한정자의 조합은 유일하게 셀을 식별하는 값이다.
   셀에 저장된 데이터는 셀의 값으로 참조된다.
   값들은 데이터 타입을 가지지 않고 항상 byte[]로 취급된다.

* 버전(Version) : 셀 내의 값들은 버전별로 저장된다.
   버전들은 long 타입의 타임스탬프에 의해 식별되고 현재 타임스탬프는 기본값으로 사용된다.
   HBase에 의해 유지되는 셀 값들의 버전들은 칼럼 패밀리를 통해 설정된다.
   셀 버전들의 기본 개수는 셋이다.


이들 여섯 개의 기본적인 컨셉은 HBase의 기초를 이루고 있다.
이들은 API에 의해 표현되는 논리 뷰를 통해서 사용자에게 노출된다.
이들은 구현체가 관리하는 물리적인 디스크 상의 데이터 위의 구조이다.
이 여섯 가지 컨셉을 확실히 알고 있으면 HBase를 이해하는 데 크게 도움이 될 것이다.

HBase에서 유일한 데이터 값은 코디네이트에 의해 접속된다.
값을 위한 완전한 코디네이트는 로우키, 칼럼 패밀리, 칼럼 한정자, 버전 이다.



# 데이터 코디네이트
논리적인 데이터 모델에서 버전 숫자는 데이터 조각의 위치를 알려주는 코디네이트의 일부분이다.
로우와 칼럼에 기반한 2D 코디네이트 시스템인 테이블에 데이터를 저장하는 관계형 데이터베이스를 생각할 수 있다.
HBase는 4D 코디네이트 시스템에 기반한 테이블에 데이터를 저장한다.
HBase에 의해 사용되는 코디네이트들은 순서대로 로우키 > 칼럼 패밀리 > 칼럼 한정자 > 버전 이다.

코디네이트를 전부 하나의 단위로 고려한다면 HBase를 키 밸류 저장소로 생각할 수 있다.
논리 데이터 모델의 추상화를 염두에 둔다면 코디네이트를 키로, 셀의 데이터를 값으로 생각할 수 있다.

사용자 삽입 이미지











사용자 삽입 이미지










# 샘플 데이터 테스트

사용자 삽입 이미지


# RDBMS 와 HBase 테이블 구조

사용자 삽입 이미지


# HBase 테이블 생성및 조회

> test_table 테이블 생성

hbase(main):065:0> create 'test_table', 'fam1'


> test_tableColumn family 추가

hbase(main):065:0> alter 'test_table', 'fam2'

Updating all regions with the new schema...

1/1 regions updated.

Done.

0 row(s) in 1.9410 seconds


> row1 입력

put 'test_table', 'row1', 'fam1:id', '101'

put 'test_table', 'row1', 'fam1:name_first', 'Adam'

put 'test_table', 'row1', 'fam1:name_last', 'Wiley'

put 'test_table', 'row1', 'fam2:department', 'Sales'


> row2 입력

put 'test_table', 'row2', 'fam1:id', '102'

put 'test_table', 'row2', 'fam1:name_first', 'Brian'

put 'test_table', 'row2', 'fam1:name_last', 'Chester'

put 'test_table', 'row2', 'fam2:department', 'Service'


> row3 입력

put 'test_table', 'row3', 'fam1:id', '103'

put 'test_table', 'row3', 'fam1:name_first', 'Julian'

put 'test_table', 'row3', 'fam2:department', 'Sales‘

> test_table 로우 조회

hbase(main):113:0> scan 'test_table'

ROW         COLUMN+CELL

 row1        column=fam1:id, timestamp=1446797570439, value=101

 row1        column=fam1:name_first, timestamp=1446797570461, value=Adam

 row1        column=fam1:name_last, timestamp=1446797570480, value=Wiley

 row1        column=fam2:department, timestamp=1446797570892, value=Sales

 row2        column=fam1:id, timestamp=1446799156978, value=102

 row2        column=fam1:name_first, timestamp=1446799156999, value=Brian

 row2        column=fam1:name_last, timestamp=1446799157018, value=Chester

 row2        column=fam2:department, timestamp=1446799157866, value=Service

 row3        column=fam1:id, timestamp=1446799886855, value=103

 row3        column=fam1:name_first, timestamp=1446799886868, value=Julian

 row3        column=fam2:department, timestamp=1446799887276, value=Sales

3 row(s) in 0.0120 seconds   -- 로우 그룹 건수


hbase(main):114:0> get 'test_table', 'row1'

COLUMN                          CELL

 fam1:id                        timestamp=1446797570439, value=101

 fam1:name_first                timestamp=1446797570461, value=Adam

 fam1:name_last                 timestamp=1446797570480, value=Wiley

 fam2:department                timestamp=1446797570892, value=Sales

4 row(s) in 0.0040 seconds   -- 컬럼 건수


hbase(main):135:0> get 'test_table', 'row3', 'fam1:name_first'

COLUMN                          CELL

 fam1:name_first                timestamp=1446799799517, value=Julian

1 row(s) in 0.0210 seconds

hbase(main):149:0> get 'test_table', 'row1', ['fam1:id', 'fam1:name_first', 'fam1:name_last']

COLUMN            CELL

 fam1:id              timestamp=1446797570439, value=101

 fam1:name_first   timestamp=1446797570461, value=Adam

 fam1:name_last   timestamp=1446797570480, value=Wiley

3 row(s) in 0.0060 seconds


hbase(main):150:0> get 'test_table', 'row1', ['fam1:name_first', 'fam1:name_last']

COLUMN            CELL

 fam1:name_first   timestamp=1446797570461, value=Adam

 fam1:name_last   timestamp=1446797570480, value=Wiley

2 row(s) in 0.0050 seconds


hbase(main):161:0> scan 'test_table', {"COLUMNS" => ['fam1:id', 'fam1:name_first', 'fam1:name_last']}

ROW                  COLUMN+CELL                      

 row1                 column=fam1:id, timestamp=1446797570439, value=101         

 row1                 column=fam1:name_first, timestamp=1446797570461, value=Adam 

 row1                 column=fam1:name_last, timestamp=1446797570480, value=Wiley 

 row2                 column=fam1:id, timestamp=1446799156978, value=102         

 row2                 column=fam1:name_first, timestamp=1446799156999, value=Brian

 row2                 column=fam1:name_last, timestamp=1446799157018, value=Chester

 row3                 column=fam1:id, timestamp=1446799886855, value=103         

 row3                 column=fam1:name_first, timestamp=1446799886868, value=Julian

3 row(s) in 0.0090 seconds


hbase(main):162:0> get 'test_table', 'row1', {"COLUMNS" => ['fam1:id', 'fam1:name_first', 'fam1:name_last']}

COLUMN            CELL

 fam1:id              timestamp=1446797570439, value=101

 fam1:name_first   timestamp=1446797570461, value=Adam

 fam1:name_last   timestamp=1446797570480, value=Wiley

3 row(s) in 0.0080 seconds



참고 도서 : HBase 인액션



※ 위 내용은, 여러 자료를 참고하거나 제가 주관적으로 정리한 것입니다.
   잘못된 정보나 보완이 필요한 부분을, 댓글 또는 메일로 보내주시면 많은 도움이 되겠습니다.
11 8, 2015 19:10 11 8, 2015 19:10


Trackback URL : http://develop.sunshiny.co.kr/trackback/1041

Leave a comment

« Previous : 1 : ... 14 : 15 : 16 : 17 : 18 : 19 : 20 : 21 : 22 : ... 648 : Next »

Recent Posts

  1. HDFS - Python Encoding 오류 처리
  2. HP - Vertica ROS Container 관련 오류...
  3. HDFS - Hive 실행시 System Time 오류
  4. HP - Vertica 사용자 쿼리 이력 테이블...
  5. Client에서 HDFS 환경의 데이터 처리시...

Recent Comments

  1. Right away I am ready to do my bre... 골목게임 11 17,
  2. Terrific article! That is the type... 선릉야구장 11 16,
  3. Yes! Finally someone writes about /. / 11 16,
  4. Круто, круто! Некот... карточные игры на... 11 13,
  5. 안녕하세요^^ 배그핵

Recent Trackbacks

  1. master djs bozeman master djs bozeman %M
  2. wedding dj bozeman mt wedding dj bozeman mt 17 11
  3. joes dj bozeman joes dj bozeman 17 11
  4. Mysql - mysql 설치후 Character set... 멀고 가까움이 다르기 때문 %M

Calendar

«   11 2019   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Bookmarks

  1. 위키피디아
  2. MysqlKorea
  3. 오라클 클럽
  4. API - Java
  5. Apache Hadoop API
  6. Apache Software Foundation
  7. HDFS 생태계 솔루션
  8. DNSBL - Spam Database Lookup
  9. Ready System
  10. Solaris Freeware
  11. Linux-Site
  12. 윈디하나의 솔라나라

Site Stats

TOTAL 2755903 HIT
TODAY 145 HIT
YESTERDAY 638 HIT