HBase 테이블 관리 명령 - create, list, exists, disable/enable, descibe, alter, drop
Table Management commands
여기서는 테이블 관리 HBase Shell 명령에 대해서 소개한다.
create - 테이블 생성
create
명령을 사용하여 테이블을 생성할 수 있다. 여기에서 테이블 이름과 Column Family 이름을 지정해야 한다. HBase 셸에서 테이블을 생성하는 구문은 다음과 같다.
create '<table name>', '<column family>'
다음은 order
라는 테이블의 샘플 스키마입니다. 여기에는 customer
와 sales
라는 두 개의 컬럼 패밀리가 있다.
아래와 같이 HBase 셸에서 이 테이블을 만들 수 있다.
create 'order', 'customer', 'sales'
실행하면 다음과 같이 실행된다.
hbase(main):002:0> create 'order', 'customer', 'sales'
Created table order
Took 2.4344 seconds
=> Hbase::Table - order
create 옵션
테이블을 생성하며 옵션을 추가할 수도 있다.
t1
을 생성하면서 최신의 version
을 5개까지 저장하는 column family cf1을 생성한다.
create 't1', {NAME => 'f1', VERSIONS => 5}
t1
을 생성하면서 column family cf1
, cf2
, cf3
을 생성한다.
create 't1', {NAME => 'f1', NAME => 'f2', NAME => 'f3'}
그밖에 옵션을 지정한 명령이다.
create 't1', {NAME => 'cf2', VERSION => 1, TTL => 2592000, BLOCKCACHE =>true}
create 't1', {NAME => 'cf2', CONFIGURATION => {'hbase.hstore.blockingStoreFiles' ='10'}}
list - 테이블 목록 조회
list
는 HBase의 모든 테이블을 나열하는데 사용되는 명령이다. 다음은 목록 명령의 구문이다.
list
이 명령을 입력하고, HBase 프롬프트에서 실행하면 아래와 같이 HBase의 모든 테이블 목록이 표시된다.
hbase(main):004:0> list
TABLE
order
1 row(s) in 0.1070 seconds
=> ["order"]
아래 처럼 옵션을 넣을 수도 있다.
hbase(main):005:0> list 'customer.*'
TABLE
order
1 row(s) in 0.0140 seconds
=> ["order"]
exists - 테이블 존재 확인
exists
명령을 사용하여 테이블의 존재를 확인할 수 있다. 다음은 테이블을 테이블 존재 확인하는 구문이다.
disable '<table name>'
다음 예에서는 ‘order’ 명령은 테이블이 존재가 존재하는지 확인 하는 예이다
hbase(main):022:0> exists 'order'
Table order does exist
0 row(s) in 0.0680 seconds
다음 예에서는 ‘user’ 명령은 테이블이 존재가 존재하는지 확인하는데, 실제 존재하는 않는 경우이다.
hbase(main):023:0> exists 'user'
Table user does not exist
0 row(s) in 0.0110 seconds
disable - 테이블 비활성화
테이블을 삭제하거나 설정을 변경하려면 먼저 disable
명령을 사용하여 테이블을 비활성화해야 한다. enable
명령을 사용하여 다시 활성화할 수 있다.
다음은 테이블을 비활성화하는 구문이다.
disable '<table name>'
다음은 order
테이블을 비활성화하는 방법을 보여주는 예이다.
hbase(main):004:0> disable 'order'
0 row(s) in 1.4570 seconds
테이블을 비활성화한 후에도 list
및 exists
명령을 통해 테이블의 존재를 확인 할수 있다.
hbase(main):009:0> list
TABLE
order
1 row(s) in 0.0140 seconds
=> ["order"]
스캔할 수 없다. 다음과 같은 오류가 발생한다.
hbase(main):010:0> scan 'order'
ROW COLUMN+CELL
ERROR: order is disabled.
// 이하 생략
is_disabled
이 명령은 테이블이 비활성화되었는지 확인하는 데 사용된다. 구문은 다음과 같다.
is_disabled '<table name>'
다음 예에서는 ‘order’ 라는 테이블이 비활성화되었는지 여부를 확인한다. 비활성화되어 있으면 true
를 반환하고 비활성화되어 있으면 false
를 반환한다.
hbase(main):011:0> is_disabled 'order'
true
0 row(s) in 0.0360 seconds
disable_all
disable_all
명령은 주어진 정규식과 일치하는 모든 테이블을 비활성화하는 데 사용된다. disable_all
명령의 구문은 다음과 같다.
disable_all ‘<regex table name>’
간단한 예시는 아래와 같다. 아래 명령은 r
로 사직하는 모든 테이블을 비활성화 한다.
disable_all 'r.*'
HBase에 dev_follow
, dev_friend
, dev_test
, dev_user
및 dev
로 시작하는 4개의 테이블이 있다고 가정한다. 다음 코드는 ‘dev’로 시작하는 모든 테이블을 비활성화한다.
hbase(main):017:0> disable_all 'dev.*'
dev_follow
dev_friend
dev_test
dev_user
Disable the above 4 tables (y/n)?
y
4 tables successfully disabled
enable - 테이블 활성화
비활성화된 테이브를 활성화 하려면 enable
명령을 사용한다. 다음은 테이블을 활성화하는 구문이다.
enable '<table name>'
다음은 테이블을 활성화하는 예이다.
hbase(main):018:0> enable 'order'
0 row(s) in 0.6580 seconds
테이블을 활성화한 후 스캔한다. 에러가 발생하지 않으면, 테이블이 정상적으로 활성화된 것이다.
hbase(main):020:0> scan 'order'
ROW COLUMN+CELL
0 row(s) in 0.0730 seconds
is_enabled
is_enabled
명령은 테이블이 활성화되었는지 확인하는 데 사용된다. 구문은 다음과 같다.
is_enabled '<table name>'
다음 명령은 order
라는 테이블이 활성화되었는지 여부를 확인한다. 활성화되어 있으면 true
를 반환하고 그렇지 않으면 false
를 반환한다.
hbase(main):021:0> is_enabled 'order'
true
0 row(s) in 0.0750 seconds
describe - 테이블 설명
describe
명령은 테이블에 대한 설명을 반환한다. 구문은 다음과 같다.
describe '<table name>'
다음은 order
테이블 에 대한 describe
명령의 출력이다.
hbase(main):006:0> describe 'order'
DESCRIPTION ENABLED
'order', {NAME => 'customer', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCO true
PE => '0', VERSIONS => '1', COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP_DELETED_CELL
S => 'false', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}, {NAME => 'sales', DATA_BLO
CK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '1', COMPRESSION => 'NON
E', MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', IN_MEMORY =
> 'false', BLOCKCACHE => 'true'}
1 row(s) in 0.1450 seconds
alter - 테이블 변경
alter
는 기존 테이블을 변경하는데 사용되는 명령이다. 이 명령을 사용하여 컬럼 패밀리의 최대 셀 수를 변경하고, 테이블 범위 연산자를 설정 및 삭제하고, 테이블에서 컬럼 패밀리를 삭제할 수 있다.
Column Family의 최대 셀 수 변경
다음은 컬럼 패밀리의 최대 셀 수를 변경하는 구문이다.
alter '<table name>', NAME => '<column family>', VERSIONS => 5
다음 예에서는 최대 셀 수를 5로 설정한다.
hbase(main):007:0>alter 'order', NAME => 'customer', VERSIONS => 5
Updating all regions with the new schema...
0/1 regions updated.
1/1 regions updated.
Done.
0 row(s) in 2.4240 seconds
hbase(main):009:0>
테이블 범위 연산자
alter를 사용하여 MAX_FILESIZE
, READONLY
, MEMSTORE_FLUSHSIZE
, DEFERRED_LOG_FLUSH
등과 같은 테이블 범위 연산자를 설정하고 제거할 수 있다.
READONLY - 읽기 전용 설정
다음은 테이블을 읽기 전용으로 만드는 구문이다.
alter '<table name>', READONLY(option)
다음 예에서는 order
테이블을 읽기 전용으로 만들었다.
hbase(main):009:0> alter 'order', READONLY
Updating all regions with the new schema...
0/1 regions updated.
1/1 regions updated.
Done.
0 row(s) in 2.3650 seconds
MAX_FILESIZE - region 설정 변경
MAX_FILESIZE
으로 region 설정을 변경한다.
alter 't1', MAX_FILESIZE => '123217728'
region의 최대 크기를 128 MB로 변경한다.
컬럼 패밀리 삭제
alter를 사용하면 column family를 삭제할 수도 있다. 다음은 alter를 사용하여 column family를 삭제하는 구문이다.
alter '<table name>', 'delete' => '<column family>'
다음은 ‘order’ 테이블에서 컬럼 패밀리를 삭제하는 예이다.
hbase(main):010:0> alter 'order', 'delete' => 'sales'
Updating all regions with the new schema...
0/1 regions updated.
1/1 regions updated.
Done.
0 row(s) in 2.3790 seconds
describe
명령으로 확인해 보면, 'sales'
가 사라진 것을 볼 수 있다.
hbase(main):011:0> describe 'order'
DESCRIPTION ENABLED
'order', {NAME => 'READONLY', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCO true
PE => '0', COMPRESSION => 'NONE', VERSIONS => '1', TTL => 'FOREVER', MIN_VERSIONS => '0', KEEP_DELETED_CELL
S => 'false', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}, {NAME => 'customer', DATA_
BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '5', COMPRESSION => '
NONE', MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', IN_MEMOR
Y => 'false', BLOCKCACHE => 'true'}
1 row(s) in 0.0850 seconds
drop - 테이블 삭제
drop
명령을 사용하여 테이블을 삭제할 수 있다. 구문은 다음과 같다.
drop '<table name>'
테이블을 삭제하기 전에 비활성화해야 한다.
hbase(main):024:0> disable 'order'
0 row(s) in 1.3960 seconds
hbase(main):025:0> drop 'order'
0 row(s) in 0.2860 seconds
exists 명령을 사용하여 테이블이 삭제되었는지 확인한다.
hbase(main):026:0> exists 'order'
Table order does not exist
0 row(s) in 0.0710 seconds
drop_all
drop_all
명령은 주어진 정규식과 일치하는 모든 테이블을 삭제하는데 데 사용된다. 구문은 다음과 같다.
drop_all '<regex table name>'
간단한 예시는 아래와 같다. 아래 명령은 r
로 사직하는 모든 테이블을 삭제한다.
drop_all 't.*'
참고: 해당 모든 테이블을 삭제하기 전에 비활성화해야 한다.
dev_follow
, dev_friend
, dev_test
, dev_user
라는 이름의 테이블이 있다고 가정한다.
hbase(main):027:0> list
TABLE
dev_follow
dev_friend
dev_test
dev_user
4 row(s) in 0.0670 seconds
=> ["dev_follow", "dev_friend", "dev_test", "dev_user"]
이 모든 테이블은 dev 문자로 시작한다 . 먼저 아래와 같이 disable_all
명령을 사용하여 이러한 테이블을 모두 비활성화한다.
hbase(main):028:0> disable_all 'dev.*'
dev_follow
dev_friend
dev_test
dev_user
Disable the above 4 tables (y/n)?
y
4 tables successfully disabled
이제 아래와 같이 drop_all
명령을 사용하여 모두 삭제할 수 있다.
hbase(main):029:0> drop_all 'dev.*'
dev_follow
dev_friend
dev_test
dev_user
Drop the above 4 tables (y/n)?
y
4 tables successfully dropped