아파치 파케이

IT 위키

Apache Parquet(파케이, 파르킷, 파킷 등)는 컬럼 지향 저장 방식을 사용하는 오픈소스 파일 포맷으로, 대규모 분산 데이터 처리 환경에서 효율적인 저장과 빠른 쿼리 성능을 제공하기 위해 설계되었다.

개요[편집 | 원본 편집]

Apache Parquet는 데이터를 열(column) 단위로 저장하는 컬럼 지향 파일 포맷이다. 이 방식은 행(row) 단위로 데이터를 저장하는 전통적인 파일 포맷과 달리, 쿼리 시 필요한 열만 선택적으로 읽어 들여 I/O 효율성을 크게 향상시킨다. Parquet는 높은 압축률과 효율적인 인코딩 방식을 제공하며, Spark SQL, Hive, Impala 등 다양한 빅데이터 처리 엔진에서 기본 저장 포맷으로 널리 채택되고 있다.

주요 특징[편집 | 원본 편집]

  • 컬럼 지향 저장 방식
    • 데이터를 행(row) 단위가 아니라 열(column) 단위로 저장하여, 쿼리 시 필요한 열만 읽어 I/O 효율성을 높인다.
  • 고성능 압축 및 인코딩
    • 중복 데이터를 효과적으로 제거하여 저장 공간을 절감하고, 빠른 데이터 입출력을 지원한다.
  • 스키마 보존 및 자동 추론
    • 파일 내부에 스키마 정보를 함께 저장하여, 데이터 로드 시 자동으로 스키마를 추론하거나 사용자가 명시적으로 지정할 수 있다.
  • 효율적인 쿼리 최적화
    • predicate pushdown, column pruning 등의 기술을 활용하여 분석 쿼리 성능을 극대화한다.
  • 스키마 진화 지원
    • 새로운 열의 추가나 스키마 변경을 유연하게 처리할 수 있어, 데이터 모델의 변화에 대응하기 용이하다.

사용 방법[편집 | 원본 편집]

Apache Parquet는 Spark SQL, Hive, Impala 등 여러 데이터 처리 시스템에서 지원된다. Spark SQL에서는 SparkSession의 DataFrameReader와 DataFrameWriter를 통해 Parquet 파일을 손쉽게 읽고 쓸 수 있다.

예제 코드 (Python)[편집 | 원본 편집]

# 데이터 읽기
df = spark.read.format("parquet").load("hdfs://path/to/data.parquet")

# 데이터 쓰기 (덮어쓰기 모드)
df.write.format("parquet").mode("overwrite").save("hdfs://path/to/output_parquet")

예제 코드 (Scala)[편집 | 원본 편집]

val df = spark.read.format("parquet").load("hdfs://path/to/data.parquet")
df.write.format("parquet").mode("overwrite").save("hdfs://path/to/output_parquet")

역사 및 배경[편집 | 원본 편집]

Apache Parquet는 Google의 Dremel 논문과 Apache Drill 등의 영향을 받아 개발되었으며, 기존의 행 지향 파일 포맷보다 분석 쿼리에 최적화된 성능을 제공한다. Parquet는 데이터 웨어하우징과 ETL(Extract, Transform, Load) 작업에서 높은 입출력 효율과 압축률 덕분에 빠르게 확산되었으며, R, pandas, Hive 등 다양한 데이터 처리 도구와의 연동을 통해 빅데이터 생태계 내에서 중요한 역할을 수행하고 있다.

같이 보기[편집 | 원본 편집]

참고 문헌[편집 | 원본 편집]