반응형
2021.09.01 - [SQL/NoSQL] - [데이터베이스 DB] NoSQL이란? (2-1) : HBase의 개념/특징/아키텍처
HBase의 데이터 접근 방식
1. HBase Shell 기초
- HBase Shell은 HBase에서 HDFS를 사용하여 명령을 전달하기 위한 대화형 명령어 처리 인터페이스(CLI)로서, Hmaster, region server와 연동하여 API에서 사용할 수 있는 작업을 Shell에서 수행할 수 있다.
- Ruby로 Java Client 호출을 wrapping하는 방식이며, 명령어 매개변수는 홑따옴표(')를 사용하는 등 Ruby syntax를 명령에 사용한다.
$ sudo service hbase-master status // 해당 명령어로 daemon이 제대로 수행중인지 체크 $ hbase shell // hbase shell 접속 > version > status > exit // hbase shell 종료
- Shell command
> create 'test', 'pinfo' // test라는 테이블에 pinfo라는 column family 생성 > list 'test' > command 'param1', 'param2' <return>
- Shell command는
(1) General command
(2) Definition command (create, list, drop, alter)
(3) Manipulation command (Put, Get, Scan 등)
로 나뉘어진다. - HBase shell은 대화식(interactive)와 배치(Batch) 모드로 수행되며, 후자의 경우 Jruby로 스크립트를 작성해서 Shell로 전달한다.
$ hbase shell rubyscript.rb > require 'rubyscript.rb'
- Bash shell과 다르게 single quote(' ') 사용하며, 명령 입력 후 <return>을 입력해야 한다.
- 다중 매개변수 호출은 중괄호({ }), key, 'value', 그리고 쉼표(,)가 필요하다.
- 테이블 생성/변경에는 Ruby Hash를 사용한다. '=>' 연산자를 hash rocket이라 하며 key - value를 매핑한다.
{'key1' => 'value1', 'key2' => 'value2', ... }
- Shell command는
2. HBase Shell 기초 : Definition command
Command Type | 설명 |
Create | - 테이블, column family 구성 > Create '<table name>', '<column family>' - 모든 테이블에는 최소 1개 이상의 column fmaily 필요 - 새로운 namespace기능을 통해 테이블 그룹화 가능 (RDB의 '데이터베이스' 또는 '스키마' 개념) - RDBMS와 다르게 column이나 relation을 생성하거나, key 관계나 제약조건을 명시할 필요 X |
List | - Hbase의 모든 테이블을 나열 > list > list 't1.*' // t1 네임스페이스 내 모든 테이블 조회 > list 'ns_test:*' |
Exists | - 개별로 테이블이 존재하는지 확인 > exists 'test' |
Describe | - 테이블에 있는 모든 column families, properties, value를 제공 > describe 'test' > describe 'ns_test:t1' |
Disable | - 테이블은 존재하지만 사용 불가능한 상태로 만듦 - 삭제 명령(drop) 수행 전 disable시켜 모든 Client가 접근할 수 없도록 한다. - 테이블이 비활성화되기까지 몇 분 소요되며, 유지보수 전에 수행한다. > disable 'ns_test:t1' > is_disabled 'user:inventory' // 비활성화 여부를 확인 true > is_abled 'ns_test:t1' false > enable ‘ns_test:t1′ > enable_all ‘t.*’ |
Alter | - Column family와 그 옵션을 추가/수정 - 테이블의 특성을 변경 - alter_async / alter_status |
Drop | - 테이블을 완전히 삭제하는 명령으로, HDFS에 있는 해당 파일이 삭제된다. - drop 이전에 disable을 수행해야 한다. - drop_all 을 통해 Regex와 매칭되는 테이블을 모두 삭제할 수 있다. |
- Table 생성 (Create)
- Namespace ns_test with t1 table
> create_namespace 'ns_test' > create 'ns_test:t1', {NAME => 'cf'}
- Namespace default with t1 table
> create 't1', 'cf1', 'cf2' > create 't1', {NAME => 'cf1'}, {NAME => 'cf2'} > create 't1', {NAME => 'cf1', VERSIONS => 5} // t1 table을 생성하면서 최신의 version을 5개까지 저장하는 column family cf1을 생성한다. // VERSION : table의 column family를 만들고 몇 개까지 값을 관리할지 지정 > create 't1', {NAME => 'cf1', CONFIGURATION => {'hbase.hstore.blockingStoreFiles' => '5'}} // CONFIGURATION을 통해 특정 property를 설정할 수 있다.
- Namespace ns_test with t1 table
- Table 수정 (Alter)
- Column family 추가/수정
> alter 'ns_test:t1', NAME => 'pimage' > alter 'test', NAME => 'pinfo', VERSION => 3
- Column family 삭제
> alter 'ns_test:t1', NAME => 'pimage', METHOD => 'delete' > alter 'ns_test:t1', 'delete' => 'pimage'
- 테이블 특성 변경 (region size = 128MB)
> alter 'test', MAX_FILESIZE => '134217728'
- alter_async : 비동기적으로 alter 명령을 수행하여 schema 변경에 대한 결과를 기다리지 않는다.
> alter_async 't1', NAME => 'f1', METHOD => 'delete' > alter_async 't1', 'delete' => 'f1' // 짧은 버전
- alter_status : alter 명령어의 상태(schema가 변경되고 있는 table들의 이름과 region 수)를 보여준다.
> alter_status 'table1'
- Column family 추가/수정
- Table 삭제 (Drop)
- 명령어
> disable 'user' > drop 'user:inventory' > drop_all 'ns:t1.*'
- 명령어
3. HBase Shell 기초 : Manipulation command (Put, Get, Scan, Count, Delete, Truncate)
- Put
- 새로운 row를 입력하거나 기존 데이터를 변경하는데 사용한다. (row key가 존재하는 경우 기존 값과 타임스탬프를 수정함)
- column family가 한 가지 version만 유지하도록 설정했다면 새 값만 유지한다. n개의 version이 유지되도록 정의한 경우에는 새 값을 포함한 n개의 값이 보존된다.
> put 'test', '1', 'pinfo:name', 'Jean' > put 'test', '2', 'position:title', 'Engineer'
- 새로운 row를 입력하거나 기존 데이터를 변경하는데 사용한다. (row key가 존재하는 경우 기존 값과 타임스탬프를 수정함)
- Get
- Row key에 해당하는 가장 최신 version의 row 또는 column 내용을 가져온다.
- Get 명령어에는 가져오고 싶은 row key를 명시한다
> get 'test', 'r1' > get 'test', 'r1', {TIMERANGE => [ts1, ts2]} > get 'test', 'r1', {COLUMN => 'c1'} > get 'test', 'r1', {COLUMN => ['c1', c2', c3']} > get 'test', 'r1', {COLUMN => 'c1', TIMESTAMP => ts1} > get 'test', 'r1', {COLUMN => 'c1', TIMERANGE => [ts1, ts2], VERSIONS => 4} > get 'test', 'r1', 'c1:', 'c2:' > get 'test', 'r1', ['c1', 'c2']
- get_counter 명령어를 통해 row와 column 수를 알 수 있다.
> get_counter ‘t1′, ‘r1′, ‘c1′
- Row key에 해당하는 가장 최신 version의 row 또는 column 내용을 가져온다.
- Scan
- 정확한 row key를 모르는 경우나 row 그룹에 대한 액세스가 필요한 경우 사용한다.
- 전체 테이블을 scan하며 start row key와 end row key로 범위를 제한할 수 있다. 단, 정지 row는 결과에 포함하지 않고 그 이전 row까지만 검색된다.
- 특정 column과 column family, filter로 Scan의 범위를 제한할 수 있다.
> scan 'table name' [, options] > get 'table name', 'rowkey' [, options] // get은 'rowkey'를 필요로 함 > scan ‘.META.’, {COLUMNS => ‘info:regioninfo’} > scan ‘t1′, {COLUMNS => ['c1', 'c2'], LIMIT => 10, STARTROW => ‘xyz’} > scan ‘t1′, {COLUMNS => ‘c1′, TIMERANGE => [1303668804, 1303668904]}
- 정확한 row key를 모르는 경우나 row 그룹에 대한 액세스가 필요한 경우 사용한다.
- Delete
- 테이블의 특정 cell, column, column family를 삭제한다.
- Timestamp 옵션을 통해 해당 버전의 column과 그 이전 버전의 column이 삭제된다.
> delete ‘t1′, ‘r1′, ‘c1′, ts1 > delete 'test', '1', 'position:title', 1582167310073 // delete '<table name>', '<row key>', '<column family:column name>', <timestamp> > deleteall ‘t1′, ‘r1′, ‘c1′, ts1 // deleteall '<table name>', '<row key>'
- 테이블의 특정 cell, column, column family를 삭제한다.
- Truncate
- 테이블에 있는 모든 row를 삭제하지만 테이블과 column family는 존재한다.
> truncate 'test' // truncate '<table name>'
- 테이블에 있는 모든 row를 삭제하지만 테이블과 column family는 존재한다.
4. Versions
- HBase는 각 cell 내의 값들의 version을 저장한다.
- version의 수는 column family 설정 시 결정된다.
- version은 long type의 Timestamp에 의해 식별되고, 현재의 Timestamp는 기본값으로 사용된다.
- cell version의 기본 개수는 3이며, 각 row는 내림차순의 Timestamp 순으로 정렬된다.
- version의 수는 column family 설정 시 결정된다.
2021.09.03 - [SQL/NoSQL] - [데이터베이스 DB] NoSQL이란? (2-3) : HBase 사용법 (feat. Hive & Impala)
참고문헌
- mySUNI : NoSQL 이해와 활용 (정진석 강사님)
- https://paulsmooth.tistory.com/75
- https://blog.naver.com/theswice/221402607051
반응형
'SQL > NoSQL' 카테고리의 다른 글
[데이터베이스/DB] NoSQL이란? (3-2) : 카산드라(Cassandra) DB의 구조 및 CQL 사용법 (1) | 2021.09.25 |
---|---|
[데이터베이스/DB] NoSQL이란? (3-1) : 카산드라(Cassandra) 개념 및 장단점 (0) | 2021.09.15 |
[데이터베이스 DB] NoSQL이란? (2-3) : HBase 사용법 (feat. Hive & Impala) (0) | 2021.09.03 |
[데이터베이스 DB] NoSQL이란? (2-1) : HBase의 개념/특징/아키텍처 (0) | 2021.09.01 |
[데이터베이스/DB] NoSQL이란? (1) : 개념 및 사용 목적, RDBMS와의 차이점 (0) | 2021.09.01 |
댓글