아파치 파케이

IT 위키

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

1 개요[편집 | 원본 편집]

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

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

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

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

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

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

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

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

3.2 예제 코드 (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")

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

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

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

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