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
'BigData' 카테고리의 다른 글
[BigData] 데이터 정합성 체크, 데이터 품질 보장 (GreatExpectations) (0) | 2025.05.06 |
---|---|
[BigData] Parquet vs ORC vs Avro 빅데이터 파일 포멧 비교 정리 (0) | 2025.01.08 |
[BigData] 헷갈릴 만한 용어 정리 HDFS 노드, EMR cluster 노드, Spark Application (process) 정리 (0) | 2021.08.19 |
[Hadoop] HDFS에 데이터 저장하기(뉴욕택시 데이터,green taxi data) (4) | 2021.07.04 |
댓글