Master UI 의 Table Details 나 describe 출력에 나오는 속성이 각각 무엇인지 파악하고, 테이블이 사전 분할(pre-split)되어 생성됐는지 판별한다.
| 키 | 값 예시 | 뜻 |
|---|---|---|
MAX_FILESIZE |
10737418240 | 리전 최대 크기. 넘으면 split. 전역 기본값은 hbase.hregion.max.filesize 로 10GiB |
MEMSTORE_FLUSHSIZE |
134217728 | MemStore flush 임계값(바이트) |
VERSIONS |
1 | 셀당 보존 버전 수 |
TTL |
604800 | 컬럼 패밀리 만료 시간(초) |
COMPRESSION |
SNAPPY / GZ / ZSTD / NONE | HFile 압축 |
BLOOMFILTER |
ROW / ROWCOL / NONE | 블룸 필터 방식 |
IN_MEMORY |
false | 블록 캐시에서 우선 유지 |
DATA_BLOCK_ENCODING |
FAST_DIFF 등 | 블록 인코딩 |
READONLY |
false | 읽기 전용 테이블 |
coprocessor$N |
클래스명 | 테이블에 붙은 coprocessor. Phoenix 사용 시 자동 등록 |
describe 'my_table'
압축 적용 여부는 describe 출력의 COMPRESSION 에서 본다. scan 결과에는 나오지 않는다.
| 키 | 뜻 |
|---|---|
hbase.regionserver.region.split.restriction.type |
split 지점 제한 정책. DelimitedKeyPrefix, KeyPrefix, None |
hbase.regionserver.region.split.restriction.prefix_length |
KeyPrefix 정책에서 기준으로 삼을 RowKey 접두사 길이 |
hbase.regionserver.region.split.restriction.delimiter |
DelimitedKeyPrefix 정책의 구분자 |
같은 접두사를 가진 행이 여러 리전으로 흩어지지 않게 묶어 두는 설정이다. 테이블 단위로도 지정할 수 있다. 정확한 키 이름은 배포판과 버전에 따라 다르므로 적용 전에 해당 버전 문서에서 확인 필요.
hbase.store.file-tracker.impl 은 StoreFile 목록을 어떻게 추적할지 정하는 구현체다. 기본은 파일시스템 디렉터리 목록을 그대로 쓰는 방식이고, 오브젝트 스토리지처럼 목록 조회가 느리거나 원자적 rename 이 없는 환경에서 별도 구현으로 바꾼다.
HBase 에는 "pre-split 으로 만들어졌다"는 표시가 없다. 리전 분포로 판단한다.
list_regions 'my_table'
사전 분할 없이 만든 테이블은 처음에 리전이 하나이며 startKey 와 endKey 가 모두 비어 있다. 사전 분할된 테이블은 생성 직후부터 여러 리전이 있고 각 리전의 경계값이 지정한 split key 와 일치한다. 데이터가 쌓여 자동 split 된 테이블도 리전이 여러 개이므로, 생성 직후 상태를 보지 않았다면 둘을 구분할 수 없다.
create 'my_table', 'cf', SPLITS => ['1000', '2000', '3000']
create 'my_table', 'cf', { NUMREGIONS => 16, SPLITALGO => 'HexStringSplit' }
create 'my_table', 'cf', SPLITS_FILE => '/tmp/splits.txt'
HexStringSplit 은 RowKey 가 16진수 문자열일 때, UniformSplit 은 균등 바이트 분포일 때 쓴다. RowKey 가 순차 증가하는 값이면 사전 분할을 해도 결국 마지막 리전으로 쓰기가 몰리므로, 접두사에 해시를 붙이는 설계를 먼저 검토한다.
coprocessor$N 속성이 붙는 이유.