Data Lakehouse 핵심 구성요소 정리

choi·2026년 3월 10일
post-thumbnail

MinIO

S3 호환 오브젝트 스토리지다. AWS S3와 API가 동일해서 boto3 같은 S3 라이브러리를 그대로 쓸 수 있다.
로컬 또는 온프레미스 환경에서 S3처럼 파일을 저장하고 싶을 때 사용한다.

이 프로젝트에서는 Parquet 파일을 저장하는 스토리지로 사용한다.


Apache Parquet

데이터를 저장하는 파일 형식이다. 컬럼 기반으로 저장하기 때문에 특정 컬럼만 읽는 분석 쿼리에 유리하다.
JSON이나 CSV보다 압축률이 높고 읽기 성능이 좋다.


Apache Iceberg

테이블 포맷 스펙이다. 실행되는 서비스가 아니다.

MinIO에 Parquet 파일이 쌓이면 그냥 파일 더미다. 어떤 파일이 어떤 테이블인지, 컬럼이 뭔지, 언제 추가됐는지 알 방법이 없다.

Iceberg는 Parquet 파일들을 테이블처럼 관리할 수 있게 해주는 규칙이다.

Iceberg가 관리하는 파일 구조

system_metrics/
├── data/
│   ├── 00000.parquet
│   └── 00001.parquet
└── metadata/
    ├── snap-001.avro        → 스냅샷 정보
    └── v1.metadata.json     → 테이블 메타데이터

스냅샷 정보

특정 시점에 어떤 Parquet 파일이 테이블에 속했는지 기록한다. 이게 있어서 특정 시점의 데이터를 조회하는 Time Travel이 가능하다.

테이블 메타데이터

컬럼 이름/타입, 파티션 방식, 스키마 변경 이력, 현재 스냅샷 정보를 담고 있다.

Iceberg를 쓰는 이유

항목경로 기반 관리Iceberg
스키마 변경기존 파일 전부 재작성자동 처리
Time Travel불가가능
파티션 등록수동 (MSCK REPAIR TABLE)자동
작은 파일 관리수동자동 compaction

Hive Metastore

Iceberg 테이블의 메타데이터 위치를 저장하는 서비스다.

Trino가 쿼리를 실행할 때 다음 순서로 동작한다.

  1. Hive Metastore에 "system_metrics 테이블 메타데이터 파일이 어디있어?" 질문
  2. Hive Metastore가 MinIO 경로 반환
  3. Trino가 그 경로의 메타데이터 파일을 읽어서 어떤 Parquet 파일을 읽어야 하는지 파악
  4. MinIO에서 실제 Parquet 파일을 읽어서 쿼리 실행

Hive Metastore 자체의 메타데이터는 DB에 저장된다. 토이 프로젝트에서는 Derby(내장 DB), 프로덕션에서는 PostgreSQL 또는 MySQL을 사용한다.


Trino

분산 SQL 쿼리 엔진이다. Iceberg 포맷을 이해하고 MinIO의 Parquet 파일을 SQL로 조회할 수 있다.

SELECT * FROM iceberg.windows_logs.system_metrics
WHERE timestamp > '2026-03-10'
LIMIT 100;

Trino 자체는 데이터를 저장하지 않는다. MinIO에 있는 파일을 읽어서 쿼리만 실행한다.


전체 흐름 요약

데이터 적재 시

Consumer가 PyIceberg로 Parquet 파일을 MinIO에 저장하고, Iceberg 메타데이터를 업데이트한 뒤 Hive Metastore에 위치를 등록한다.

쿼리 실행 시

Trino가 Hive Metastore에서 메타데이터 위치를 확인하고, MinIO에서 메타데이터와 Parquet 파일을 읽어서 쿼리 결과를 반환한다.

profile
늦게나마 정신을 차리려고 하는 개발 뭐시기하는 사람

0개의 댓글