csv vs parquet vs avro vs orc
데이터를 저장, 처리하기 위해 csv, parquet, avro, orc 등의 다양한 파일 유형을 사용한다. 각 유형에 따라 특징이 존재하며, 데이터 처리의 성능이 달라진다. 이에 따라 파일 유형이 데이터 처리 비용과 성능을 좌우할 수 있기에 상황에 맞는 것을 선택해 활용하는 것이 중요하다. 그중에서 가장 알려져 있고, 자주 사용되는 유형인 csv, parquet, avro, orc 유형의 개념과 장단점, 유스케이스를 알아보자.
- 대용량 데이터 저장 = 높은 비용
- 긴 읽기/쓰기 시간 = 느린 시스템, 높은 연산 능력
- 높은 연산 능력 = 비용 증가
csv (Comma-Separated Values)
# csv 파일 예시 (test.csv)
timestamp,product_id,product_score
1555480889,46260,0.3381890166444166
1555480889,85461,0.34786700678437343
1555480889,85462,0.2932997952484385
1555480889,113723,0.3803736086217753
1555480889,113724,0.39684375226672763
1555480889,113727,0.38768682121073605
개념
- 데이터를 쉼표로 구분하여 저장하는 텍스트 기반의 파일 형식
- 각 열은 쉼표(,)로 구분되며, 각 행은 줄 바꿈(\n)으로 구분
- Row-Wise Storage 방식
장점
- 가독성 : 사람이 읽기 쉬운 형식으로 다양한 프로그램 (excel 등)에서 쉽게 열어볼 수 있음
- 호환성 : 대부분의 데이터 분석 툴과 언어에서 기본적으로 지원
- 저장 용이성 : 구조가 간단해 Text Editor로 쉽게 수정 가능
단점
- 복잡한 데이터 성능 : 복잡한 데이터, 분할된 데이터 저장에 적합하지 않음
- 대규모 데이터 성능 : 열 단위 압축 및 처리를 지원하지 않아 대량의 데이터(row > 10*6) 처리 시 성능 저하
- 데이터 구분 : 특수문자, null, 공백 등의 값 구분 문제 발생 가능
유스케이스
- 소규모 데이터 분석 : 단순 데이터 조회나 통계 집계
parquet
개념
- 열 지향 데이터 저장 형식, Apache Hadoop에서 최적화된 파일 형식 중 하나
- 데이터를 열 단위로 압축해 저장하므로 읽기 속도가 빠르고 효율이 좋음
- 내장 메타데이터에 스키마 및 구조 정보를 저장
- Hybrid Storage 방식
- 하나의 데이터 블록은 하나의 Row Group으로 구성
- 하나의 데이터 블록 내에서 Column-Wise 방식으로 저장
장점
- 빠른 읽기 : 열 지향 방식으로 필요한 열만 읽어들일 수 있어 속도가 빠름
- 효율적인 압축 : 열 단위로 압축되므로 동일한 타입의 데이터를 효과적으로 압축 가능
- 대규모 데이터 : 분할된 데이터, 대용량 데이터에 적합
단점
- 접근 제한 : Text Editor로 읽기, 편집 불가
- 제한된 지원 : Apache Spark, Apache Hadoop을 제외하면, 제한된 지원
유스케이스
- 빅데이터 분석 : 대량의 로그 분석, 머신 러닝 모델 학습 데이터 저장에 사용
- 데이터 레이크 : 분산 저장 시스템에서 고성능 분석을 수행할 때 활용
avro
개념
- 메타데이터를 JSON으로 저장해 읽기 쉽게 변환
- 데이터를 이진 형식으로 저장하며, Row-Wise Storage 방식
- 스키마 변경을 지원하며, 직렬화를 효율적으로 수행
장점
- Schema Evolution 지원 : 데이터 구조 변경 시 스키마 업데이트를 통해 호환성 유지
- 소규모 데이터(row < 1000) 에서 효율적이며, Kafka와 같은 집약적 작업에 적합
단점
- 읽기 작업이 많은 작업에는 적합하지 않음
- 제한된 지원 : Apache Kafka, Apache Hadoop을 제외하면, 제한된 지원
유스케이스
- 데이터 스트리밍 : 실시간 데이터 처리, 로그 처리 시스템 등에서 사용
- 데이터 저장 및 복원 : Schema Evolution을 지원하기에 데이터 모델이 변경하는 환경에서 유리
orc (Optimized Row Columnar)
개념
- Apache Hive를 위해 설계된 Column-Wise Storage 방식
- 대용량 데이터에 대해 최적화된 성능 제공
- Parquet과 유사하지만, orc는 Hive에서 더 좋은 성능 발휘
장점
- 빠른 처리 속도 : 대용량 데이터 분석 시 유리하며, 쓰기 작업이 많은 작업에 적합
- Hive 호환성 : Hive에서 최적의 성능을 발휘하며 Hive 쿼리 수행 시 효율적
- ACID 트랜잭션 지원
단점
- 커뮤니티 지원 : parquet에 비해 커뮤니티 지원이 적음
- 제한된 지원 : Apache Hive, Apache Hadoop을 제외하면, 제한된 지원
유스케이스
- Hive를 활용한 데이터 웨어하우스
- parquet과 유사하지만, Hive 환경에서 최적의 성능 제공
결론
각 파일 유형 별 유스케이스 요약
상황에 따라 다르겠지만, 일반적으로 사용하는 유스케이스이다.
- csv : 작은 데이터 (row < 1,000,000) 분석 및 집계 작업
- parquet : 대규모 데이터 분석, 머신 러닝 학습 데이터 저장
- avro : Apache Kafka와 같은 실시간 스트리밍 작업
- orc : parquet과 유사, 그러나 Hive를 사용할 경우 더 좋은 성능
비교
- Schema Evolution : 스키마가 다른 데이터와의 호환성 여부 (Spark 예시 링크)
- Compression : 압축률
- Splitability : 데이터를 독립적인 청크 데이터로 분리해 처리할 수 있는 용이성
Types | CSV | AVRO | Parquet | ORC |
text vs binary | text | metadata in JSON, data in binary |
binary | binary |
Data type | no | yes | yes | yes |
Schema evolution | no | yes | yes | yes |
Storage type | row | row | column | column |
OLAP/OLTP | OLTP | OLTP | OLAP | OLAP |
Splittable | yes | yes | yes | yes |
Compression | yes | yes | yes | yes |
Batch | yes | yes | yes | yes |
Stream | yes | yes | no | no |
Ecosystems | popular everywhere |
Big Data and Streaming (Kafka) |
Big Data and BI (Spark) |
Big Data and BI (Hive) |
Reference
https://spidyweb.tistory.com/461
https://medium.com/@aiiaor/which-data-file-format-to-use-csv-json-parquet-avro-orc-e7a9acaaa7df
https://www.adaltas.com/en/2020/07/23/benchmark-study-of-different-file-format/
'Data Engineering > 빅데이터' 카테고리의 다른 글
[빅데이터] 빅데이터 처리와 Hadoop의 등장 (2) | 2024.07.05 |
---|---|
[빅데이터] 하둡 (Hadoop)과 Spark 개념 정리 (0) | 2024.06.17 |