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라는 테이블의 샘플 스키마입니다. 여기에는 customersales라는 두 개의 컬럼 패밀리가 있다.

HBase Column family

아래와 같이 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

테이블을 비활성화한 후에도 listexists 명령을 통해 테이블의 존재를 확인 할수 있다.

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_userdev로 시작하는 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



최종 수정 : 2023-06-16