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 |