카테고리 없음

[BigData] Parquet vs ORC vs Avro

장경훈 2024. 11. 9. 17:41

Apache Parquet

주요 특징

  • 컬럼별 압축과 인코딩 지원
  • 중첩된 데이터 구조 지원
  • 스키마 진화(evolution) 지원
  • 효율적인 데이터 스캐닝
  • 컬럼 기반 저장 방식
  • Hadoop 에코시스템과 높은 호환성

장점

  • 분석 쿼리 성능이 우수
  • 높은 압축률
  • 다양한 프로젝트와의 호환성(Spark, Hive, Impala 등)

단점

  • 수정이 빈번한 데이터에는 적합하지 않음
  • 작은 파일의 경우 오버헤드 발생 가능

권장사례

  • 대규모 분석 쿼리가 필요한 경우
  • 데이터 웨어하우스
  • 데이터 레이크
  • 머신러닝 데이터셋

Apache ORC (Optimized Row Columnar)

주요 특징

  • ACID 트랜잭션 지원
  • Hive 성능 최적화를 위해 설계
  • 내장된 인덱싱 기능
  • 타입별 최적화된 인코딩
  • 강력한 압축 지원

장점

  • Hive와의 뛰어난 통합
  • 빠른 데이터 검색 성능
  • 효율적인 메모리 사용

단점

  • Hive 외 다른 도구와의 호환성이 상대적으로 낮음
  • 스키마 진화가 Parquet보다 제한적

권장사례

  • Hive 기반 데이터 웨어하우스
  • ACID 트랜잭션이 필요한 경우
  • 빠른 데이터 검색이 필요한 경우

Apache Avro

주요 특징

  • 동적 스키마 지원
  • 행 기반 저장 방식
  • 데이터 직렬화 프레임워크
  • 스키마 기반의 데이터 교환 지원
  • 언어 중립적인 데이터 직렬화
  • RPC(Remote Procedure Call) 지원
  • 스키마 진화에 강점

장점

  • 유연한 스키마 변경 지원
  • 뛰어난 데이터 직렬화 성능
  • 다양한 프로그래밍 언어 지원

단점

  • 분석 쿼리 성능이 컬럼 기반 포맷보다 낮음
  • 파일 크기가 상대적으로 큼

Avro 권장 사용 사례

  • 스트리밍 데이터 처리
  • 메시징 시스템
  • ETL 파이프라인
  • 빈번한 스키마 변경이 필요한 경우

성능 비교표

성능 지표 비교

성능 지표 Parquet ORC Avro
압축률 높음 (⭐⭐⭐⭐) 매우 높음 (⭐⭐⭐⭐⭐) 중간 (⭐⭐⭐)
쿼리 성능 매우 높음 (⭐⭐⭐⭐⭐) Hive에서 최고 (⭐⭐⭐⭐⭐) 낮음 (⭐⭐)
쓰기 성능 중간 (⭐⭐⭐) 낮음 (⭐⭐) 높음 (⭐⭐⭐⭐⭐)

기능 비교

기능 Parquet ORC Avro
저장 방식 컬럼 기반 컬럼 기반 행 기반
ACID 트랜잭션
스키마 진화 제한적 지원 제한적 지원 강력 지원
중첩 구조 지원
인덱싱 제한적 내장 지원

생태계 통합

도구/프레임워크 Parquet ORC Avro
Apache Spark 매우 좋음 좋음 좋음
Apache Hive 좋음 매우 좋음 좋음
Apache Impala 매우 좋음 보통 보통
Presto 좋음 좋음 좋음

최적 사용 사례

포맷 권장 사용 사례
Parquet • 대규모 데이터 분석
• 데이터 웨어하우스
• 데이터 레이크
• 머신러닝 데이터셋
ORC • Hive 기반 데이터 웨어하우스
• ACID 트랜잭션 필요 시
• 빠른 데이터 검색 필요 시
Avro • 스트리밍 데이터 처리
• 메시징 시스템
• ETL 파이프라인
• 빈번한 스키마 변경

선택 시 고려사항

고려사항 설명
데이터 접근 패턴 • 분석 중심: Parquet/ORC
• 순차적 접근: Avro
도구 호환성 • Spark 중심: Parquet
• Hive 중심: ORC
• 다양한 언어 지원 필요: Avro
스키마 변경 • 빈번한 변경: Avro
• 안정적 스키마: Parquet/ORC
성능 요구사항 • 읽기 성능: Parquet/ORC
• 쓰기 성능: Avro
저장 공간 • 최적화 필요: ORC
• 일반적 압축: Parquet