백엔드
Apache Spark에서 컬럼 기반 저장 포맷 Parquet(파케이) 제대로 활용하기
두줄요약
Spark 로그 저장 포맷을 JSON에서 Parquet로 전환하고 인코딩 옵션을 조정했습니다. 저장 용량을 74% 줄이고 쿼리 성능을 10~30배 높였습니다.
문제 상황
- gzip 압축 JSON 원본 로그 직접 처리에 따른 과도한 데이터 읽기와 분석 I/O 비용
- Spark용 저장 포맷을 Parquet로 전환했지만 초기 저장 용량 개선 폭의 기대치 미달
원인 분석
- 많은 익명 사용자 ID로 인한 dictionary 크기 증가와 plain encoding 폴백
- nested field의 column pruning·predicate pushdown 미지원
- 이전 Parquet 파일 호환성 문제에 따른 binary 문자열 min-max 통계 비활성화
해결 방법
- block size 축소와 dictionary page size 확대로 dictionary encoding 적용 범위 확보
- 빈번한 predicate 대상 컬럼의 top level 이동
parquet.string.min-max-statistics활성화로 row group skipping 적용
성능/운영 포인트
- 102GB JSON 로그 기준 gzip 23GB에서 Parquet 6GB로 74% 저장 용량 절감
- 네트워크 I/O 감소와 컬럼 선별·조건 푸시다운으로 쿼리 처리 성능 10~30배 향상
- Spark의 Parquet 구현 및 버전별 지원 기능 확인 필요

