Hadoop EcoSystem

Apache Parquet 이란 - 1

비번변경 2024. 3. 8. 21:45

개요

빅데이터 관련 프로젝트를 하다보면 json, csv 등 외의 parquet 형식의 파일을 다루게 되는데, 이번 글에서는 parquet 파일에 대해서 간단히 정리해두려고 한다. 참고로 parquet은 파케이라고 발음한다.

 

 

Apache Parquet

 

Apache Parquet이란 Hadoop 에코 시스템에서 공통적으로 사용할 수 있는 컬럼 기반 데이터 압축 형식을 말한다.

복잡하게 중첩된 데이터 구조를 위해 개발되었고, Dremel의 논문에서 작성된 record shredding and assembly algorithm을 사용한다. 또한 열(컬럼) 기반으로 데이터를 압축하여 효율적인 압축 및 인코딩을 지원한다.

 

 

관련 개념

Block (HDFS block)

HDFS에서의 블록을 의미한다. 

 

File

파일의 메타데이터를 포함하는 HDFS 파일. 실제 데이터를 포함할 필요는 없다.

 

Row group

데이터를 논리적으로 row로 수평 분할한다. 다만 row group에 대해 물리적인 구조로 나뉘어졌다는 보장은 할 수 없다. row group은 dataset 내 각 컬럼에 대한 column chunk로 구성된다. 

 

Column chunk

특정 column에 대한 데이터 청크. 특정 row group에 존재하며 파일의 연속성을 보장한다. 인터리브되는(interleaved) Column chunk에 여러 페이지 타입이 있을 수 있습니다.

🤔 interleaved
읽고 쓸 때 성능을 높히기 위해 데이터가 서로 인접하지 않도록 배열하는 방법


Page

Column chunk는 압축 또는 인코딩적인 측면에서 개념적으로 분할할 수 없는 단위인 페이지로 나누어진다. 

 

 

파일은 하나 이상의 row group으로 구성되고, row group은 column 마다 하나의 column chunk를 가진다. 그리고 column chunk는 하나 이상의 페이지를 포함한다.

 

 

파일 형식

parquet 파일은 header, 하나 이상의 블록과 footer로 구성된다.

header에는 parquet 형식의 파일임을 알리는 4 byte 매직 넘버인 PAR1만 포함하며, 파일의 메타 데이터는 footer에 저장된다. footer에는 포맷의 버전, 스키마, 추가 키-값 쌍, 파일의 모든 블록에 대한 메타데이터와 같은 정보를 포함한다.

 

    4-byte magic number "PAR1"
    <Column 1 Chunk 1 + Column Metadata>
    <Column 2 Chunk 1 + Column Metadata>
    ...
    <Column N Chunk 1 + Column Metadata>
    <Column 1 Chunk 2 + Column Metadata>
    <Column 2 Chunk 2 + Column Metadata>
    ...
    <Column N Chunk 2 + Column Metadata>
    ...
    <Column 1 Chunk M + Column Metadata>
    <Column 2 Chunk M + Column Metadata>
    ...
    <Column N Chunk M + Column Metadata>
    File Metadata
    4-byte length in bytes of file metadata (little endian)
    4-byte magic number "PAR1"

위의 예시에서는 테이블에 N개의 컬럼이 M개의 row group으로 분할되어 있다.

parquet 파일을 읽기 위해서는 먼저 파일 메타데이터를 읽어 관심 있는 column chunk를 찾고, 찾은 column chunk를 순차적으로 읽어야 한다.

parquet 파일은 데이터로부터 메타데이터를 분리할 수 있도록 설계되었다. 따라서 하나의 열을 여러 파일로 분한할 수 있고, 단일 메타데이터 파일이 여러 개의 parquet 파일을 참조할 수 있다.

 

 

참고 문서

https://parquet.apache.org/docs/overview/motivation/

https://data-engineer-tech.tistory.com/52

Parquet 구조