hbase 0.94에서 hbase shell을 사용해서 테이블 추가/삭제를 진행하는 예시이다.
$ hbase shell
16/12/16 14:20:08 WARN conf.Configuration: hadoop.native.lib is deprecated. Instead, use io.native.lib.available
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 0.94.15-cdh4.7.1, rUnknown, Tue Nov 18 08:51:37 PST 2014
table1을 생성한다.
> create 'table1', 'columnfamily1'
=> Hbase::Table - table1
생성된 테이블이 존재하는지 확인한다.
> list 'table1'
TABLE
table1
table1 테이블을 삭제하기 위해 drop를 사용하려면 먼저 disable을 먼저 사용하라고 알린다.
> drop 'table1'
ERROR: Table table1 is enabled. Disable it first.'
Here is some help for this command:
Drop the named table. Table must first be disabled: e.g. "hbase> drop 't1'"
table1 테이블을 삭제하기 위해 disable과 drop을 실행한다.
> disable 'table1'
0 row(s) in 1.1150 seconds
> drop 'table1'
0 row(s) in 1.0580 seconds
> list 'table1'
TABLE
0 row(s) in 0.0230 seconds
데이터를 테이블에 저장하는 예시를 진행한다.
먼저 간단한 google 테이블을 생성한다. 테이블의 이름은 google이고, 컬럼패밀리는 vi 이다.
> create 'google', 'vi'
0 row(s) in 1.0600 seconds
=> Hbase::Table - google
테이블에 row를 추가하기 위해 put을 사용한다.
> put 'google', 'row1', 'vi:make', '1'
0 row(s) in 0.0360 seconds
> put 'google', 'row2', 'vi:make', '2'
0 row(s) in 0.0060 seconds
> put 'google', 'row3', 'vi:make', '3'
0 row(s) in 0.0050 seconds
> put 'google', 'row1', 'vi:get', '1'
0 row(s) in 0.0030 seconds
> put 'google', 'row2', 'vi:get', '2'
0 row(s) in 0.0030 seconds
> put 'google', 'row3', 'vi:get', '3'
0 row(s) in 0.0030 seconds
> scan 'google'
ROW COLUMN+CELL
row1 column=vi:get, timestamp=1481865972730, value=1
row1 column=vi:make, timestamp=1481865868177, value=1
row2 column=vi:get, timestamp=1481865976807, value=2
row2 column=vi:make, timestamp=1481865882636, value=2
row3 column=vi:get, timestamp=1481865981007, value=3
row3 column=vi:make, timestamp=1481865891477, value=3
3 row(s) in 0.0410 seconds
특정 컬럼 패밀리만 보고 싶다면, scan에 COLUMNS를 추가한다.
> scan 'google', {COLUMNS => ['vi:make']}
ROW COLUMN+CELL
row1 column=vi:make, timestamp=1481865868177, value=1
row2 column=vi:make, timestamp=1481865882636, value=2
row3 column=vi:make, timestamp=1481865891477, value=3
3 row(s) in 0.0850 seconds
해당 커맨드에 LIMIT을 이용해 개수를 지정해서 볼 수 있다.
> scan 'google', {COLUMNS => ['vi:make'], LIMIT => 100}
ROW COLUMN+CELL
row1 column=vi:make, timestamp=1481865868177, value=1
row2 column=vi:make, timestamp=1481865882636, value=2
row3 column=vi:make, timestamp=1481865891477, value=3
3 row(s) in 0.0170 seconds
> scan 'google', {COLUMNS => ['vi:make'], LIMIT => 2}
ROW COLUMN+CELL
row1 column=vi:make, timestamp=1481865868177, value=1
row2 column=vi:make, timestamp=1481865882636, value=2
2 row(s) in 0.0090 seconds
> scan 'google', {COLUMNS => ['vi:make'], LIMIT => 1}
ROW COLUMN+CELL
row1 column=vi:make, timestamp=1481865868177, value=1
1 row(s) in 0.0050 seconds
데이터를 얻으려면 get을 사용하는데, 테이블과 로우 키가 중요하다. 테이블과 컬럼패밀리로 검색하면 값을 얻을 수 없다.
> get 'google', 'vi:make'
COLUMN CELL
0 row(s) in 0.0110 seconds
테이블과 로우 키로 데이터를 검색한다. 테이블-로우키로 검색 가능하고, 테이블-로우키-컬럼패밀리로 검색할 수 있다.
> get 'google', 'row1'
COLUMN CELL
vi:get timestamp=1481865972730, value=1
vi:make timestamp=1481865868177, value=1
2 row(s) in 0.0340 seconds
> get 'google', 'row1', 'vi:get'
COLUMN CELL
vi:get timestamp=1481865972730, value=1
1 row(s) in 0.0080 seconds
scan 처럼 get도 COLUMN 단위로 검색할 수 있다. (FILTER, TIMERANGE로도 검색할 수 있다)
> get 'google', 'row1', {COLUMN => [ 'vi:make', 'vi:get' ] }
COLUMN CELL
vi:get timestamp=1481865972730, value=1
vi:make timestamp=1481865868177, value=1
2 row(s) in 0.0120 seconds
> get 'google', 'row1', {COLUMN => [ 'vi:get' ] }
COLUMN CELL
vi:get timestamp=1481865972730, value=1
1 row(s) in 0.0050 seconds
삭제하려면 delete를 사용한다.
> scan 'google'
ROW COLUMN+CELL
row1 column=vi:get, timestamp=1481865972730, value=1
row1 column=vi:make, timestamp=1481865868177, value=1
row2 column=vi:get, timestamp=1481865976807, value=2
row2 column=vi:make, timestamp=1481865882636, value=2
row3 column=vi:get, timestamp=1481865981007, value=3
row3 column=vi:make, timestamp=1481865891477, value=3
> delete 'google', 'row1', 'vi:make'
0 row(s) in 0.0120 seconds
scan 해보면 데이터가 삭제된 것을 확인할 수 있다.
> scan 'google'
ROW COLUMN+CELL
row1 column=vi:get, timestamp=1481865972730, value=1
row2 column=vi:get, timestamp=1481865976807, value=2
row2 column=vi:make, timestamp=1481865882636, value=2
row3 column=vi:get, timestamp=1481865981007, value=3
row3 column=vi:make, timestamp=1481865891477, value=3
3 row(s) in 0.0350 seconds
delete할 때는 테이블-로우키-컬럼패밀리에 맞춰 지워야 한다. delete 테이블-로우키, delete 테이블을 실행시 에러가 발생한다.
> delete 'google', 'row2'
//에러
> delete 'google'
// 에러
데이터 변경(update)는 put을 그대로 사용한다.
> get 'google', 'row1'
COLUMN CELL
vi:get timestamp=1481865972730, value=1
1 row(s) in 0.0080 seconds
> put 'google', 'row1', 'vi:get', 3
0 row(s) in 0.0120 seconds
> get 'google', 'row1'
COLUMN CELL
vi:get timestamp=1481868410482, value=3
1 row(s) in 0.0040 seconds
테이블 삭제하려면, disable -> drop 테이블 과정을 거친다.
여기서는 disable과 enable 테이블을 시도해본 후 drop 테이블을 실행한다.
hbase(main):023:0> disable 'google'
0 row(s) in 1.1310 seconds
disable했기 때문에 scan이나 get하면 DoNotRetryIOException 예외가 발생한다.
hbase(main):024:0> scan 'google'
ROW COLUMN+CELL
하지만, exists를 실행하면 아직 존재하는지 알 수 있다. 기타 list, decribe를 사용시 제대로 동작 중인지 확인할 수 있다.
> exists 'google'
Table google does exist
0 row(s) in 0.0250 seconds
> describe 'google'
DESCRIPTION ENABLED
'google', {NAME => 'vi', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => false
'NONE', REPLICATION_SCOPE => '0', VERSIONS => '3', COMPRESSION => 'NO
NE', MIN_VERSIONS => '0', TTL => '2147483647', KEEP_DELETED_CELLS => '
false', BLOCKSIZE => '65536', IN_MEMORY => 'false', ENCODE_ON_DISK =>
'true', BLOCKCACHE => 'true'}
1 row(s) in 0.0460 seconds
> list 'google'
TABLE
1 row(s) in 0.0230 seconds
disable 했던 테이블을 다시 사용하려면 enable을 호출한다.
> enable 'google'
0 row(s) in 1.1450 seconds
> scan 'google'
ROW COLUMN+CELL
row1 column=vi:get, timestamp=1481868410482, value=3
row2 column=vi:get, timestamp=1481865976807, value=2
row2 column=vi:make, timestamp=1481865882636, value=2
row3 column=vi:get, timestamp=1481865981007, value=3
row3 column=vi:make, timestamp=1481865891477, value=3
3 row(s) in 0.0210 seconds
google 테이블을 삭제한다.
> disable 'google'
0 row(s) in 1.1450 seconds
> drop 'google'
0 row(s) in 1.0570 seconds
'hbase' 카테고리의 다른 글
[링크] hadoop & hbase간의 의존성/연관성(compatible) 버전 찾기. (0) | 2017.11.03 |
---|---|
[공부] Hbase compaction (0) | 2016.12.16 |
[hbase] list/describe command 주의 (0) | 2016.12.15 |
[hbase] hbase create하다가 hang 발생 해결 (0) | 2016.12.15 |
[hbase] rowkey 검색하기 (0) | 2016.12.15 |