/hbase/archive 와 /hbase/oldWALs 가 계속 커져 HDFS 용량을 잡아먹는다. 어떤 설정이 이 디렉터리를 정리하며, 값을 줄이면 실제 데이터에 영향이 있는지 판단해야 한다.
HBase 는 compaction · region split · merge · 테이블 삭제 과정에서 HFile 을 즉시 지우지 않고 /hbase/archive 로 옮긴다. 스냅샷 · replication · region replica 가 그 파일을 아직 참조할 수 있기 때문이다. WAL 은 같은 이유로 /hbase/oldWALs 로 옮긴다. 두 디렉터리는 HMaster 의 Chore 스레드(HFileCleaner, LogCleaner)가 주기적으로 훑어 정리한다.
이 설정들은 살아 있는 테이블이 읽는 HFile 과는 무관하다. 따라서 값을 바꿔도 Put · Get · Scan 결과나 데이터 정합성은 달라지지 않는다. 영향을 받는 것은 디스크 사용량과, archive 를 참조하는 작업(스냅샷 생성과 복구, replication, snapshot export)의 안정성이다.
| 설정 키 | 의미 | 값 |
|---|---|---|
hbase.master.cleaner.interval |
Cleaner Chore 실행 주기(ms) | 소스 기준 600000(10분). 공식 hbase-default.xml 에 노출되지 않아 확인 필요 |
hbase.master.logcleaner.ttl |
oldWALs 에 WAL 을 보존하는 최소 시간(ms) |
600000(10분) |
hbase.master.hfilecleaner.ttl |
archive 에 HFile 을 보존하는 최소 시간(ms) |
300000(5분)으로 알려져 있으나 hbase-default.xml 에 없어 확인 필요 |
hbase.snapshot.ttl |
스냅샷 기본 TTL(초). 0 이면 수동 삭제 전까지 유지 | 0 |
hbase.master.hfilecleaner.plugins |
HFile 삭제 가능 여부를 판정하는 플러그인 목록 | 기본 플러그인 |
hbase.master.logcleaner.plugins |
WAL 삭제 가능 여부를 판정하는 플러그인 목록 | 기본 플러그인 |
<property>
<name>hbase.master.hfilecleaner.ttl</name>
<value>3600000</value>
</property>
<property>
<name>hbase.master.logcleaner.ttl</name>
<value>3600000</value>
</property>
TTL 을 지나도 참조가 남아 있으면 삭제되지 않는다. 판정 순서는 보존 시간을 먼저 보고 그다음 플러그인(스냅샷 참조, replication 큐, region replica)을 보므로, 주기만 줄인다고 파일이 바로 사라지지는 않는다.
기본값을 유지해도 되는 경우는 스냅샷을 쓰지 않고 replication 도 없는 단일 클러스터다. 반대로 스냅샷 기반 백업, cross-cluster replication, region replica, snapshot export 와 distcp 를 쓰는 환경에서는 TTL 을 늘리는 쪽이 맞다. 짧으면 진행 중인 스냅샷 복구나 export 가 FileNotFoundException 으로 깨진다. 주기를 1~2분까지 줄이면 디스크 회수는 빨라지지만 리전 수가 많은 클러스터에서는 HMaster 가 매번 archive 트리를 스캔하느라 부하를 받는다.
echo "list_snapshots" | hbase shell -n
echo "delete_snapshot 'old_snapshot'" | hbase shell -n
hdfs dfs -du -h /hbase/archive
hdfs dfs -du -h /hbase/oldWALs
oldWALs 만 계속 커진다면 replication peer 가 소비하지 못한 WAL 이 쌓이는 상황을 먼저 의심한다. 죽은 peer 를 남겨 두면 WAL 이 영원히 정리되지 않는다.
hdfs dfs -rm -r /hbase/archive 로 직접 지우지 않는다. 스냅샷이 참조하는 HFile 을 지우면 그 스냅샷은 복구 불가능해지고, 복구를 시도하면 FileNotFoundException 이 난다. 정리는 cleaner 에게 맡기고, 급하면 스냅샷을 지워 참조를 끊는다.