아파치 파케이
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 참고 문헌[편집 | 원본 편집]
- Apache Parquet 공식 문서, https://parquet.apache.org
- Apache Spark 공식 문서, https://spark.apache.org/docs/latest/sql-programming-guide.html
- Vohra, R. (2012). Apache Parquet: Columnar Storage for Hadoop. O'Reilly Media.