Skip to Content
Data EngineeringNoSQL 시계열 데이터 관리를 위한 HBase TTL 및 Major Compaction 최적화
📊 Data Engineering2018년 6월 11일

NoSQL 시계열 데이터 관리를 위한 HBase TTL 및 Major Compaction 최적화

#hbase#compaction#ttl#data-engineering#flamingo

과거 당사의 빅데이터 성능 관리 솔루션인 빅데이터 모니터링 플랫폼는, Hadoop 에코시스템 각지에 설치된 에이전트들로부터 초당 수만 건씩 날아오는 시계열(Time-series) 지표 데이터를 분산 NoSQL인 HBase에 고속으로 Write(저장)하여 운영했습니다.

이때 가장 큰 화두는 “과거 데이터를 어떻게 지울 것인가?”였습니다. RDBMS처럼 매일 밤 DELETE FROM metrics WHERE date < '2개월 전' 같은 쿼리를 날렸다가 막대한 툼스톤(Tombstone) 마커가 쌓여 HBase RegionServer가 뻗어버리는 참사를 겪게 되기 때문입니다.

이를 근본적으로 해결하기 위해 파일 단위 자동 소멸 기능인 ColumnFamily TTL(Time-To-Live)을 적용하고, IO 폭주를 막기 위해 Major Compaction 주기를 통제하는 전략을 사용했습니다.


1. Major Compaction 주기 수정 (hbase-site.xml)

HBase의 Major Compaction은 여러 번 분할되어 쌓인 HFile들을 거대한 하나의 파일로 병합(Merge)하면서, 지워진 데이터(Tombstone)나 TTL이 만료된 데이터를 물리적으로 영구 삭제하여 디스크 공간을 회수하는 무거운 백그라운드 작업입니다.

기본값이 7일(7 days)로 되어있기 때문에, 트래픽이 한창 몰리는 화요일 대낮에 갑자기 클러스터의 디스크 IO가 요동치며 대형 서비스 지연이 일어날 수 있습니다. 따라서 이 자동 실행을 완전히 꺼버리고(0), 야간에 관리망 크론(Cron) 탭을 통해 수동으로 제어하거나, 주기를 엄청 길게 조정해야 합니다.

Ambari나 Cloudera Manager 화면에서 아래 값을 수정합니다. (혹은 hbase-site.xml 수동 수정)

xml
<property> <name>hbase.hregion.majorcompaction</name> <value>604800000</value> </property>

(참고 값: 604800000 = 7일, 86400000 = 1일, 0 = 자동 시스템 컴팩션 비활성화)


2. 시계열 데이터의 자동 소멸: TTL (Time-To-Live) 적용

HBase 테이블 생성 시, 혹은 운영 중에 특정 컬럼 패밀리(ColumnFamily)에 TTL(초 단위) 값을 걸어두면, 그 시간이 지나버린 데이터는 쿼리 결과에서 자동으로 가려지고, 이후 앞서 말한 Major Compaction이 돌 때 물리적인 디스크에서도 영구 삭제됩니다.

배치 DELETE를 날릴 필요 없이 설계 단에서 찌꺼기를 치우는 최고의 아키텍처 패턴입니다.

적용 절차 (hbase shell)

shell
$ bin/hbase shell # 2. 적용 대상의 스키마 및 현재 TTL 상태 확인 hbase> desc 'METRICS'

확인해 보면 초기 테이블 생성 시 따로 지정하지 않았다면 TTL 속성이 FOREVER (혹은 아주 큰 값 2147483647 초)로 되어 있을 것입니다.

hbase
# 3. METRICS 테이블의 '0' 이라는 이름의 ColumnFamily에 대해 유지 기간을 15일로(1296000초) 변경 hbase> alter 'METRICS', {NAME => '0', TTL => 1296000}

3. 실전 적용: 플랫폼 메트릭 보관 정책 설계

당시 플랫폼는 수집된 데이터를 그대로만 저장하지 않고, 내부적으로 스파크(Spark) 배치를 돌려 1분, 5분, 1시간 단위로 요약(Aggregate) 테이블에 이관하는 파이프라인을 짰습니다.

그리고 요약의 정도에 따라 각 HBase 테이블의 TTL을 다르게 걸어 스토리지 비용을 극한으로 아꼈습니다. 실제 플랫폼 솔루션의 핵심 HBase 운영 테이블 리스트와 TTL 정책은 다음과 같았습니다.

  • 초 단위 Raw 데이터 (엄청 무거움)
    • METRICS (최근 15일 데이터만 보관 후 소멸)
    • SYSTEM_METRICS (시스템 부하 지표, 15일)
  • 집계 요약 데이터 (용량 적음, 장기 보관 가능)
    • METRICS_1MIN (1분 통계, 3개월 보관)
    • METRICS_5MIN (5분 통계, 6개월 보관)
    • METRICS_HOURLY (1시간 통계, 1년 보관)
    • METRICS_DAILY (일별 통계, 3년 영구 보관)
  • 보조 오딧 데이터 (Audit)
    • HDFS_AUDIT
    • MAPREDUCE_AUDIT

빅데이터 설계의 핵심은 “모든 데이터를 무한정 들고 있는 것”이 아니라, “버려도 되는 시점의 데이터를 시스템 부하 없이 은밀하게 버려주는 파이프라인 설계”에 있다는 것을 확실히 배운 아키텍팅이었습니다.

Last updated on