HBase TTL과 Major Compaction 설정 메모
HBase에 저장하는 메트릭의 보관 기간을 조정하면서 TTL과 Major Compaction 설정을 정리했습니다. TTL은 데이터를 얼마나 오래 조회 대상으로 둘지 정하고, compaction은 저장 파일을 정리하는 과정과 관련이 있습니다.
아래는 2018년 당시 메모에 남긴 값입니다. 테이블별로 필요한 보관 기간과 운영 부하를 확인한 뒤 적용해야 합니다.
Major Compaction 주기
당시 hbase-site.xml에서 확인한 설정은 다음과 같습니다. 배포판을 사용한다면 Ambari나 Cloudera Manager에서 관리하는 설정도 함께 확인해야 합니다.
<property>
<name>hbase.hregion.majorcompaction</name>
<value>604800000</value>
</property>이 값은 밀리초 단위로, 604800000은 7일, 86400000은 1일입니다. HBase 1.2 문서 는 주기 기반 compaction과 실행 시점을 분산하는 jitter 설정을 설명합니다. 특정 요일·시각에 정확히 실행하는 스케줄과는 다릅니다.
값을 0으로 두면 시간 기반 자동 major compaction을 끕니다. 모든 compaction이 중단된다는 뜻은 아닙니다. 부하를 이유로 무조건 끄기보다 실행 방식과 데이터 정리 계획을 함께 봐야 합니다.
현재 TTL 확인
HBase shell을 사용할 수 있는 계정과 권한으로 대상 테이블을 확인합니다.
bin/hbase shellhbase> desc 'METRICS'당시 출력에서 컬럼 패밀리는 0이었고 TTL은 다음처럼 표시됐습니다.
NAME => '0'
TTL => '1296000 SECONDS (15 DAYS)'컬럼 패밀리의 보관 기간 변경
TTL은 초 단위입니다. 같은 컬럼 패밀리를 15일로 설정하는 명령은 다음과 같습니다.
alter 'METRICS', {NAME => '0', TTL => 1296000}테이블 이름만 아니라 컬럼 패밀리 이름도 맞아야 합니다. 다른 테이블을 변경할 때는 desc로 실제 구성을 먼저 확인해야 합니다.
TTL이 지난 데이터는 조회에서 제외되지만, 그 순간 디스크 사용량까지 바로 줄어드는 것은 아닙니다. 만료 데이터의 물리적 정리는 compaction과 연결돼 있어 보관 기간과 파일 정리 시점을 구분해서 봐야 합니다.
다른 메트릭 테이블 확인
당시에는 METRICS 외에도 SYSTEM_METRICS, METRICS_1MIN, METRICS_5MIN, METRICS_HOURLY, METRICS_DAILY, HDFS_AUDIT, MAPREDUCE_AUDIT 같은 테이블을 함께 확인했습니다.
원본 메트릭과 집계 데이터는 필요한 보관 기간이 다를 수 있습니다. METRICS의 15일 설정을 다른 테이블에도 일괄 적용하기보다, 각 테이블의 용도와 현재 설정을 확인해 기간을 정해야 합니다.