RDBMS 의 데이터베이스에 해당하는 것은 네임스페이스다. 네임스페이스를 만들고 그 안에 테이블을 둔다. 지정하지 않으면 모든 테이블이 default 네임스페이스에 들어간다.
hbase shell
create_namespace 'sales'
list_namespace
describe_namespace 'sales'
테이블 이름은 네임스페이스:테이블 형식으로 쓴다.
create 'sales:users', 'info'
put 'sales:users', 'user1', 'info:name', 'Hong'
scan 'sales:users'
네임스페이스를 지우려면 그 안의 테이블을 모두 지운 뒤 drop_namespace 한다. 비어 있지 않으면 거부된다.
네임스페이스는 쿼터와 권한의 단위이기도 하다. 테이블 수·리전 수 제한이나 Ranger 정책을 네임스페이스 단위로 걸 수 있으므로, 업무 단위로 나눠 두면 나중에 편하다.
데이터만 비우는 것이 목적이면 truncate 가 가장 간단하다. 내부적으로 disable · drop · create 를 수행하고 테이블 정의는 되살린다.
truncate 'sales:users'
사전 분할한 리전 경계를 유지하고 싶으면 truncate_preserve 를 쓴다. 대용량 테이블에서 리전이 다시 하나로 줄어드는 것을 막아 준다.
truncate_preserve 'sales:users'
정의까지 바꿔야 한다면 지우고 다시 만든다. 비활성화가 선행돼야 한다.
disable 'sales:users'
drop 'sales:users'
create 'sales:users', 'info'
HDFS 의 /hbase 디렉터리를 지우는 방식은 메타 테이블과 WAL 까지 함께 없앤다. 테스트 클러스터가 아니라면 하지 않는다. 특히 CM 이 관리하는 클러스터에서 경로를 직접 지우면 서비스가 뜨지 않게 되는 경우가 있으므로, 서비스 메뉴의 초기화 동작을 쓰거나 테이블 단위로 정리한다.
테이블을 만들 때 컬럼 패밀리마다 속성을 줄 수 있다.
create 'logs', {NAME => 'cf', VERSIONS => 1, COMPRESSION => 'SNAPPY', TTL => 604800}
| 속성 | 뜻 |
|---|---|
VERSIONS |
셀마다 보관할 버전 수 |
TTL |
초 단위 보관 기간. 컬럼 패밀리 단위로 적용된다 |
COMPRESSION |
SNAPPY · GZ · ZSTD 등 |
BLOOMFILTER |
ROW 또는 ROWCOL |
컬럼 패밀리는 저장과 I/O 의 단위이므로 적게 두는 것이 좋다. 보통 하나, 많아도 셋을 넘기지 않는다. 성능은 대부분 로우 키 설계가 결정한다.
확인은 다음과 같이 한다.
list
describe 'logs'