data engineering

parquet vs orc vs avro (big data file format )

qkqhxla1 2021. 3. 25. 21:10

1. www.datanami.com/2018/05/16/big-data-file-formats-demystified/
공통점.
3개 타입은 전부 하둡에 저장하는데에 최적화되어있다. orc, parquet, avro 3개 전부 기계가 읽을수 있는 바이너리 포맷이다. orc, parquet, avro는 여러개의 디스크로 나뉘어질수 있으며 이 특징으로 인해 확장성과 동시처리가 가능해진다.
반면에 json이나 xml은 나뉘어서 저장이 불가능하며, 그로 인해 확장성과 동시성에 제한이 있다.
3개 포맷 모두 스키마를 파일이 가지고 있어서 다른곳으로 옮겨서 처리하는게 가능하다.

차이점.
orc, avro, parquet의 가장 큰 차이점은 데이터를 어떻게 저장하느냐이다. parquet과 orc는 데이터를 column 기반으로 저장하고, avro는 row기반으로 저장한다. 컬럼 기반과 로우 기반의 차이점은 medium.com/@minyodev/avro-vs-parquet-what-to-use-518ccbe8fb0c 에도 간단하게 잘 나와있다.

row기반 저장 -> 모든 필드에 접근해야 할때 유용,
column 기반 저장 -> 특정 필드로 자주 접근할때 유용하다고 함.

column기반 저장은 큰 분량을 읽어서 분석해야하는 환경에 최적화되어있고, row기반은 큰 분량을 쓰는데 유리하다.

특정 상황에 따라서 column기반이 더 좋을수도 있고, row기반이 더 좋을수도 있다. 

2. towardsdatascience.com/demystify-hadoop-data-formats-avro-orc-and-parquet-e428709cf3bb
avro : row기반, 데이터 스키마는 json이지만 데이터는 바이너리로 저장된다.
orc : row columnar 포맷이다. 컬럼 기반 저장이라고 위에서 읽었는데 columnar포맷? 이게 뭐지? 싶어서 찾아봤는데
blog.matthewrathbone.com/2019/11/21/guide-to-columnar-file-formats.html 에 잘 설명되어있다.

짧은 요약 : columnar포맷은 읽기 최적화가 되어있고, 압축률이 좋다. 단점은 전체 데이터를 재구성하는데 오래걸린다는 것. 어쨌든 orc는 row columnar포맷이고, 하이브에 최적화되어있다.
parquet : row columnar 포맷이고, 효율적으로 저장하고 프로세싱하는데 최적화 되어있다.

더 깊게 들어가는 내용이 있는데 그건 원문에서 읽고, 위에 적은 정도만 알아두면 될듯 싶다.