본문 바로가기
BigData

[BigData] 파일 포멧과 압축 포멧 선택 기준 정리 (parquet, Avro, gzip,snappy,ZSTD)

by 스파이디웹 2025. 5. 5.
728x90

데이터 엔지니어 기술 면접에서 깊게는 질문하지 않았지만, 심심찮게 나오는 "정보계 운영 및 데이터 파이프라인을 구축하시면서 어떤 파일 포멧을 사용하셨고, 어떤 압축포멧을 사용하셨나요?" 에 대한 답변을 정리할겸 포멧에 대한 장단점과 사용 이유에 대해서 정리해보려고 합니다.

 

이전에 비교 정리해둔 파일 포멧에 대한 글은 아래의 링크를 참조해주세요.

https://spidyweb.tistory.com/567

https://spidyweb.tistory.com/461


1. Parquet와 Avro 어떨 때, 왜 사용하나요?

보통 Parquet는 Spark와 Avro는 Kafka와 같은 Streaming platform에 잘 어울린다고 알려져 있습니다.

그 이유를 정리해보자면 각 파일의 특징과 관련이 있습니다.

1) Parquet

1. 컬럼 지향 저장 형식 (Columnar Format)

  • Spark는 대규모 데이터셋에서 특정 컬럼만 조회하는 경우가 많기 때문에, 컬럼 단위로 읽을 수 있는 Parquet은 I/O를 최소화

2. 고성능 압축 및 인코딩

  • Parquet는 같은 타입의 데이터를 연속적으로 저장하므로 압축률이 높고(다른 파일 포멧들에 비해 우수한 편), 인코딩 효율이 뛰어남
  • Spark의 디스크/메모리 자원 사용 최적화에 기여

3. 분산 처리에 최적화된 구조

  • Parquet는 메타데이터가 잘 정리되어 있어서 Spark가 분산된 여러 노드에서 빠르게 읽고 처리하기 좋음
  • Spark의 Catalyst 옵티마이저 및 Tungsten 엔진과의 궁합도 좋음

4. 스키마 명시적 관리

  • 명확한 스키마가 있어 Spark DataFrame과 호환성이 매우 좋음
컬럼 지향 + 고성능의 압축 + 메타데이터 및 내장된 스키마가 대용량 데이터를 처리하는 spark의 특징과 잘어울려 parquet파일포멧을 사용합니다.

2) Avro

1. 로우 지향 저장 형식 (Row-oriented Format)
Avro는 레코드 단위(행 단위)로 저장되며, 각 메시지를 하나의 전체 단위로 빠르게 직렬화/역직렬화 할 수 있음.

  • Kafka는 이벤트 스트림(메시지)를 다루므로, 한 건 한 건 빠르게 처리할 수 있는 Avro 포맷이 적합

2. 빠른 직렬화/역직렬화 속도

  • Avro는 바이너리 직렬화 포맷이기 때문에 메시지를 전송하고 소비하는 속도가 빠름
  • Kafka 컨슈머/프로듀서에서 빠르게 encode/decode 가능

3. 스키마 진화(Schema Evolution) 지원

  • Avro는 스키마를 명시적으로 저장하며, 버전 호환성(예: backward compatible, forward compatible)을 잘 지원
  • Kafka에서 실시간 데이터 구조 변경이 자주 일어날 수 있으므로, 스키마 변경 대응에 용이

4. 경량 포맷

  • 메시지 크기를 최소화(실제 데이터는 이진(Binary) 포맷으로 직렬화)하여 Kafka 브로커와 네트워크 I/O에 부담을 주지 않음
로우 기반 + 빠른 직렬화 + 스키마 진화로 인해 스트리밍의 특징과 잘 어울려 Avro 파일포멧을 사용합니다.

2. 해당 파일포멧의 압축 포멧은 어떤 것을 그리고 왜 사용하셨나요?

항목 Gzip Snappy ZTSD(Zstandard)
압축률 높음 낮음 높음 (Gzip보다 좋거나 비슷)
압축 속도 느림 매우 빠름 빠름 (Snappy보다 약간 느림)
압축 해제 속도 느림 빠름 빠름
CPU 사용량 높음 낮음 중간
파일 크기 작음 작음
Streaming 처리 적합도 낮음 높음 높음
Parquet 기본값 ❌ (지원은 됨)

 

1) 각 포맷 설명 및 사용 사례

1. Snappy

  • 목표: 속도 중심의 실시간 처리
  • 장점: 빠른 압축/해제, 낮은 CPU 사용 → 스트리밍, Spark 등에서 유리
  • 단점: 압축률이 낮아 파일 크기는 큼
  • 사용 사례:
    • Apache Spark, Hadoop, Kafka Streams
    • Parquet의 기본 압축 포맷
    • 실시간 분석, 빠른 읽기/쓰기 중요할 때
    • 빠른 데이터 처리와 병렬 I/O가 중요한 Spark, Hadoop, Kafka 환경

2. Gzip

  • 목표: 높은 압축률
  • 장점: 작은 파일 크기
  • 단점: 느린 속도 (특히 압축 해제), 높은 CPU 사용
  • 사용 사례:
    • 장기 저장용 데이터 백업
    • 네트워크 비용이 매우 중요한 환경
    • 로그 아카이빙
    • 저장 공간 최적화가 중요하고, 읽기/쓰기 성능이 덜 중요한 백업/보관 목적

3. ZSTD (Zstandard)

  • 목표: 압축률과 속도의 균형
  • 장점: Gzip만큼 또는 그 이상으로 압축률이 좋으면서도 빠름
  • 단점: 상대적으로 지원 환경이 제한적 (하지만 널리 확장 중) - 호환성과 후발주자 인식에 의한 사용률이 저조한 편
  • 사용 사례:
    • 최신 시스템에서 Spark, Hive, Presto 등과 함께 사용 가능
    • 읽기/쓰기 성능과 파일 크기를 둘 다 고려해야 할 때
    • Spark + 데이터 저장 최적화 모두 필요한 경우 (예: 로그 분석, 대용량 배치 처리)
728x90

댓글