HBase Shell 명령어 완벽 가이드

HBase는 Hadoop 파일시스템을 기반으로 데이터를 저장하는 분산 컬럼 기반 데이터베이스입니다. 구조적으로 하나의 마스터 서버와 여러 리전 서버로 구성되어 있으며, 데이터는 테이블(리전) 형식으로 저장됩니다. 이 가이드에서는 HBase Shell에서 사용하는 주요 명령어들을 상세히 설명하겠습니다.

HBase 아키텍처 개요

HBase는 마스터 서버가 전체 리전 서버들을 관리하는 구조를 가집니다. 모든 데이터 저장은 HDFS(Hadoop Distributed FileSystem) 위에서 이루어지며, 테이블은 리전으로 분할되어 저장됩니다.

일반 관리 명령어

status

HBase 클러스터의 현재 상태를 확인합니다. 서버 수 및 전체健康상태 정보를 제공합니다.

version

현재 사용 중인 HBase 버전을 출력합니다.

table_help

테이블 참조 명령어에 대한 상세한 도움말을 제공합니다. HBase 0.96부터는 테이블 객체에 직접 명령어를 호출할 수 있는 기능이 추가되었습니다.

whoami

현재 로그인한 사용자에 대한 정보를 표시합니다.

데이터 정의 언어(DDL)

create

새로운 테이블을 생성합니다.

create '테이블명', '컬럼패밀리1', '컬럼패밀리2'

list

HBase에 존재하는 모든 테이블의 목록을 반환합니다.

disable / enable

테이블을 비활성화하거나 활성화합니다. 테이블 구조 변경이나 삭제 전에는 반드시 비활성화해야 합니다.

is_disabled / is_enabled

특정 테이블이 현재 비활성화 또는 활성화 상태인지 확인합니다.

describe

테이블의 상세 구조 정보를 출력합니다. 컬럼패밀리 이름, 버전 수, 압축 방식, 블록 크기 등의 정보를 포함합니다.

alter

기존 테이블의 구조를 변경합니다. 컬럼패밀리 추가, 삭제, 속성 수정이 가능합니다.

exists

특정 테이블이 존재하는지 확인합니다.

drop / drop_all

테이블을 삭제합니다. drop 명령어는 단일 테이블, drop_all 명령어는 정규 표현식에 매칭되는 테이블들을 일괄 삭제합니다.

Java Admin API

Java 프로그래밍 환경에서는 org.apache.hadoop.hbase.client 패키지의 HBaseAdmin과 HTableDescriptor 클래스를 통해 DDL 작업을 프로그래매틱하게 수행할 수 있습니다.

데이터 조작 언어(DML)

put

지정된 테이블의 특정 행에 컬럼과 값을 저장합니다.

put '테이블명', '행키', '컬럼패밀리:컬럼 qualifier', '값'

get

특정 행의 데이터를 조회합니다. 전체 컬럼패밀리 또는 특정 컬럼만 선택적으로 조회할 수 있습니다.

delete

특정 행의 특정 컬럼 값을 삭제합니다.

deleteall

행 전체의 모든 데이터를 삭제합니다.

scan

테이블의 모든 데이터를 스캔합니다. LIMIT, STARTROW, COLUMNS 등의 옵션을 사용하여 원하는 범위만 조회할 수 있습니다.

count

테이블에 저장된 행의 총 개수를 반환합니다.

truncate

테이블을 비활성화, 삭제, 다시 생성하는 과정을 자동으로 수행합니다.

Java Client API

org.apache.hadoop.hbase.client 패키지의 HTable 클래스, Put, Get 등을 사용하여 Java 코드에서 CRUD 작업을 수행할 수 있습니다.

실전 예제

테이블 생성

member라는 이름의 테이블을 생성하고, info라는 컬럼패밀리를 정의합니다.

hbase> create 'member', 'info'
Created table member
Took 2.3 seconds
=> Hbase::Table - member

HDFS에서 확인하면 다음과 같은 구조로 저장됩니다.

/hbase/data/default/member/
/hbase/data/default/member/.tabledesc/
/hbase/data/default/member/.tabledesc/.tableinfo.0000000001
/hbase/data/default/member/.tmp/
/hbase/data/default/member/{region-id}/
/hbase/data/default/member/{region-id}/.regioninfo
/hbase/data/default/member/{region-id}/info/

데이터 삽입

put 명령어를 사용하여 데이터를 저장합니다. HBase에서는 행키, 컬럼패밀리, 컬럼 qualifier, 값으로 데이터가 구성됩니다.

hbase> put 'member', 'user001', 'info:name', 'kimchi'
Took 0.0087 seconds
hbase> put 'member', 'user001', 'info:age', '28'
Took 0.0062 seconds
hbase> put 'member', 'user002', 'info:name', 'leesoft'
Took 0.0051 seconds
hbase> put 'member', 'user002', 'info:age', '35'
Took 0.0048 seconds

여기서 'info:name'의 콜론 앞부분(info)은 컬럼패밀리, 뒷부분(name)은 컬럼 qualifier입니다.

데이터 조회

scan 명령어로 전체 데이터를 조회합니다.

hbase> scan 'member'
ROW                              COLUMN+CELL
 user001                         column=info:age, timestamp=1234567890123, value=28
 user001                         column=info:name, timestamp=1234567890122, value=kimchi
 user002                         column=info:age, timestamp=1234567890125, value=35
 user002                         column=info:name, timestamp=1234567890124, value=leesoft
2 row(s)
Took 0.0058 seconds

get 명령어로 특정 행만 조회합니다.

hbase> get 'member', 'user001'
COLUMN                           CELL
 info:age                        timestamp=1234567890123, value=28
 info:name                       timestamp=1234567890122, value=kimchi
1 row(s)
Took 0.0062 seconds

테이블 상태 확인

hbase> is_enabled 'member'
true
Took 0.0048 seconds
=> true

hbase> is_disabled 'member'
false
Took 0.0053 seconds
=> 1

테이블 구조 확인:

hbase> describe 'member'
Table member is ENABLED
member
COLUMN FAMILIES DESCRIPTION
{NAME => 'info', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', 
NEW_VERSION_BEHHAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', 
CACHE_DATA_ON_WRITE => 'false', DATA_BLOCK_ENCODING => 'NONE', 
TTL => 'FOREVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', 
BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'false', 
IN_MEMORY => 'false', CACHE_BLOOMS_ON_WRITE => 'false', 
PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'NONE', 
BLOCKCACHE => 'true', BLOCKSIZE => '65536'}
1 row(s)
Took 0.1156 seconds

데이터 업데이트

put 명령어는 데이터를 삽입할 때도 사용하지만, 동일한 행과 컬럼에 새로운 값을 입력하면 자동으로 업데이트됩니다.

hbase> put 'member', 'user001', 'info:age', '30'
Took 0.0071 seconds
hbase> get 'member', 'user001', 'info:age'
COLUMN                           CELL
 info:age                        timestamp=1234567890999, value=30

데이터 삭제

특정 컬럼 값 삭제:

hbase> delete 'member', 'user001', 'info:age'
Took 0.1423 seconds
hbase> get 'member', 'user001'
COLUMN                           CELL
 info:name                       timestamp=1234567890122, value=kimchi
1 row(s)

행 전체 삭제:

hbase> deleteall 'member', 'user001'
Took 0.0038 seconds
hbase> get 'member', 'user001'
COLUMN                           CELL
0 row(s)

테이블 삭제

테이블을 삭제하려면 먼저 비활성화해야 합니다.

hbase> disable 'member'
Took 0.8534 seconds
hbase> is_enabled 'member'
false
Took 0.0049 seconds
=> false

hbase> drop 'member'
Took 0.7123 seconds

만약 비활성화 없이 삭제하려고 하면 오류가 발생합니다.

ERROR: Table member is enabled. Disable it first.

테이블 구조 변경

컬럼패밀리의 최대 버전 수를 변경합니다.

hbase> disable 'member'
Took 0.7392 seconds
hbase> alter 'member', {NAME => 'info', VERSIONS => '5'}
Updating all regions with the new schema...
All regions updated.
Done.
Took 1.4823 seconds
hbase> enable 'member'
Took 1.2156 seconds

테이블 참조 객체를 통한 작업

HBase Shell에서는 테이블 참조 객체를 생성하여 작업을 수행할 수 있습니다.

hbase> t = get_table 'member'
=> Hbase::Table - member
hbase> t.get 'user002'
COLUMN                           CELL
 info:age                        timestamp=1234567890125, value=35
 info:name                       timestamp=1234567890124, value=leesoft
1 row(s)
Took 0.0134 seconds

테이블 참조 객체에서도 특정 컬럼패밀리만 조회하거나 스캔 옵션을 사용할 수 있습니다.

스캔 옵션 활용

특정 컬럼과 행 범위 지정:

hbase> scan 'member', {COLUMNS => ['info:name'], LIMIT => 1, STARTROW => 'user001'}
ROW                              COLUMN+CELL
 user001                         column=info:name, timestamp=1234567890122, value=kimchi
1 row(s)
Took 0.0039 seconds

여러 컬럼패밀리 동시에 조회:

hbase> get 'member', 'user002', {COLUMN => ['info:name', 'info:age']}
COLUMN                           CELL
 info:age                        timestamp=1234567890125, value=35
 info:name                       timestamp=1234567890124, value=leesoft
1 row(s)

테이블 데이터 전체 삭제

truncate 명령어는 테이블을 비활성화, 삭제, 재생성하는 과정을 자동으로 수행합니다.

hbase> truncate 'member'
Truncating 'member' table (it may take a while):
- Disabling table...
- Dropping table...
- Creating table...
Took 3.4521 seconds

태그: HBase Shell hadoop NoSQL Database

8월 4일 11:06에 게시됨