본문 바로가기
Data

[File Format For Big Data] Parquer vs ORC vs Avro | LIM

by forestlim 2023. 3. 12.
728x90
반응형

Parquet, ORC, Avro 모두 빅데이터를 처리하는 사람들이라면 한번씩 마주쳤을 법한 파일 포맷이다. 

나는 Parquet 파일은 자주 써보았는데 다른 파일 포맷들은 어떤 특성이 있는 지 몰라서 공부 겸 정리해보고자 한다. 

Parquet 파일 관련해서 정리해 둔 포스팅이 있다. 

 

https://amazelimi.tistory.com/78

 

Parquet란 무엇이고, 왜 사용하는가 | LIM

Parquet (파케이) 데이터를 저장하는 방식 중 하나로 하둡생태계에서 많이 사용되는 파일 포맷이다. 빅데이터를 처리할 때는 많은 시간과 비용이 들어가기 때문에 빠르게 읽고, 압축률이 좋아야

amazelimi.tistory.com

https://amazelimi.tistory.com/79

 

Parquet 파일 읽고 써보기 | LIM

먼저 Parquet에 대한 개념과 기본 원리에 대한 정리한 글이다. https://amazelimi.tistory.com/78 Parquet란 무엇이고, 왜 사용하는가 Parquet (파케이) 데이터를 저장하는 방식 중 하나로 하둡생태계에서 많이

amazelimi.tistory.com

 

🤔 공통점 vs 차이점

 

공통점에 대해 알아보자.

  • Hadoop에 저장하는데 최적화 되어 있다. 
  • 기계가 읽을 수 있는 바이너리 포맷이다. 
  • 여러개의 디스크로 나뉘어질 수 있으며 이는 빅데이터의 분산처리에 용이하다. 
  • 스키마 파일을 가지고 있다. 

 

다음으로 차이점에 대해 알아보자.

  • Parquet 과 ORC는 column 기반으로 저장하고, Avro 는 row 기반으로 저장한다.
    • row 기반으로 저장되면 모든 열에 접근할 때 용이하고, column 기반으로 저장하는 건 특정 필드로 자주 접근할 때 용이하다. 
    • row 기반은 데이터를 쓸 때 용이하고, column 기반은 읽어서 분석해야 하는 경우에 용이하다
    • column 기반은 row 기반에 비해 압축률이 좋지만, 전체 데이터를 재구성하는데 시간이 오래걸린다는 단점이 있다.
  • 따라서 한번에 모든 필드를 접근해서 데이터를 읽고 쓰고자 할 때는 Avro 파일 포맷을 쓰는 것이 좋고, 특정 필드에만 반복적으로 접근해야 하는 경우 Parquet이나 ORC 를 사용하는 것이 좋다. 
  • ORC는 Hive 에 특화된 포맷. Impala, Pig, Spark 등 다른 쿼리 엔진에서 사용하기 부적합하다. (범용 스토리지 포맷이 아님)

 

✔️ ORC(Optimized Row Columnar)

ORC는 한번도 들어본 적이 없어서 더 자세히 정리해보자면, 일단 ORC는 위에서 설명한 것처럼 Hive에 특화되어 있다. 

 

Hive 에서 저장되는 파일 포맷들은 다음과 같다.

  • RC File(Row Columnar)
  • ORC File(Optimized Row Columnar)
  • Parquet

Hive 초기에는 RC 파일 포맷을 사용했었다. RC 파일 포맷은 각 컬럼을 하나의 파일 묶음으로 분산 저장하는 포맷이었다. 

저장에는 큰 문제가 없었지만, read 과정에서 다시 모으는 Join 비용이 너무 크다는 문제점이 있었다

 

RC 파일 포맷처럼 컬럼단위로 파일을 기록하되, 인덱스도 함께 기록하였기 때문에 read 과정에서의 성능 향상이 이루어졌다. 

압축률이 매우 좋다는 장점이 있다. 

https://blog.cloudera.com/orcfile-in-hdp-2-better-compression-better-performance/

 

📝 빅쿼리 로드 시

빅쿼리에서는 Avro, Parquet, ORC 파일 포맷 모두 로드가 가능하다. 

https://cloud.google.com/bigquery/docs/batch-loading-data?hl=ko 

 

데이터 일괄 로드  |  BigQuery  |  Google Cloud

Cloud Storage 또는 로컬 파일에서 데이터를 일괄 작업으로 BigQuery로 로드하는 방법을 설명합니다.

cloud.google.com

  • Avro 는 binary row-based format 으로, 여러개의 slot 으로 분산되어서 처리될 수 있다. 
  • Parquet 과 ORC는 binary columnar format 으로, 빅쿼리로 데이터를 가져올 때 전체 데이터를 읽어야만 한다. 

여러 파일 포맷에 대해 BigQuery 로드 속도는 다음과 같다. Compressed 된 Avro 가 제일 빠른 것을 볼 수 있다. 

 

https://medium.com/google-cloud/bigquery-explained-data-ingestion-cdc26a588d0

 

  • 다만, 파일 사이즈가 Avro가 Parquet 보다 크기 때문에 빅쿼리 로드 시 엄청나게 빠른 속도가 필요한 것이 아니라면 parquet 파일이 avro 보다 낫다. 

 

이 분이 기깔나게 실험해서 정리해주셨다.

https://towardsdatascience.com/load-files-faster-into-bigquery-94355c4c086a

 

Load files faster into BigQuery

Benchmarking CSV, GZIP, AVRO and PARQUET file types for ingestion

towardsdatascience.com

 

728x90
반응형

댓글