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으로 확인한다. 



> 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

ERROR: org.apache.hadoop.hbase.DoNotRetryIOException: google is disabled.

hbase(main):025:0> get 'google', 'row1'
COLUMN                       CELL

ERROR: org.apache.hadoop.hbase.DoNotRetryIOException: google is disabled.


하지만, 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

google

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


Posted by '김용환'
,