피드로 돌아가기
Dev.toDatabase
원문 읽기
Delta Lake DESCRIBE HISTORY OOM 해결을 위한 트랜잭션 로그 최적화
How I debugged a Delta Lake DESCRIBE HISTORY timeout (and what's actually causing it)
AI 요약
Context
streaming data의 60초 주기 commit으로 인해 _delta_log 내 JSON 파일이 기하급수적으로 증가하는 구조적 문제 발생. DESCRIBE HISTORY 명령어가 Checkpoint를 활용하지 못하고 모든 JSON 파일을 순차적으로 파싱함에 따라 Cloud Storage I/O 병목과 Driver JVM Heap 부족으로 인한 OutOfMemoryError 유발.
Technical Solution
- logRetentionDuration 설정을 통한 7일 단위의 JSON 커밋 파일 강제 퍼지(Purge) 처리
- Minor Log Compaction 활성화로 다수의 순차적 JSON 파일을 단일 통합 파일로 결합하여 파일 개수 감소
- Unity Catalog system tables로 감사 로그 쿼리를 전환하여 Raw JSON 파싱 과정을 최적화된 테이블 조회로 대체
- Bronze 테이블의 Append-only 쓰기 후 Silver/Gold 단계에서 시간 단위 Bulk MERGE를 수행하는 Medallion Architecture 적용
- Deletion Vectors 도입을 통한 UPDATE/MERGE 시 Parquet 파일 재작성 최소화 및 JSON 로그 내 churn 감소
- Driver 메모리 사양을 m5.xlarge에서 r5.4xlarge로 상향하여 대규모 레코드 집계를 위한 JVM Heap 공간 확보
실천 포인트
- 고빈도 스트리밍 파이프라인의 logRetentionDuration을 7일 이하로 설정했는지 확인 - Delta
3.0+ 환경에서 Minor Log Compaction 설정(spark.databricks.delta.deltaLog.minorCompaction.useForReads) 활성화 여부 검토 - 단순 감사 목적의 쿼리를 DESCRIBE HISTORY 대신 Unity Catalog system tables로 전환 고려 - 비즈니스 요구사항을 검토하여 스트리밍 트리거 주기를 5분 이상으로 확장 가능 여부 판단