Tools/ETC

Apache Iceberg 기본 구조

칼쵸쵸 2025. 1. 16. 20:06
반응형

 

출처 : https://medium.com/data-engineer-things/i-spent-4-hours-learning-apache-iceberg-heres-what-i-found-9750b0d70d84

 

I spent 4 hours learning Apache Iceberg. Here’s what I found.

The table format’s overview and architecture

blog.det.life

Apache Iceberg가 필요한 이유

 

데이터 레이크하우스 솔루션을 배포할 때, 데이터는 오브젝트 스토리지에 저장되며, Spark나 Trino 같은 좋아하는 엔진을 사용해 쿼리를 실행할 수 있습니다. 데이터 이동이 필요 없고, 한 곳에서 애드혹 쿼리부터 머신러닝 워크로드까지 모두 처리할 수 있습니다.

그러나 어떤 파일이 하나의 데이터셋에 속하는지를 엔진이 어떻게 알 수 있을까요?

 

바로 테이블 포맷(Table Format)이 이 문제를 해결해 줍니다. 테이블 포맷은 수많은 데이터 파일을 체계적으로 관리하며 이렇게 선언합니다

 

테이블 포맷이란?

테이블 포맷은 **데이터 웨어하우스의 기능(테이블 추상화, ACID 트랜잭션, 타임 트래블 등)**을 데이터 레이크로 가져오는 기술입니다. 이 모든 것은 메타데이터를 기반으로 이루어집니다.

 

 

 

기존 테이블 포맷: Apache Hive

Apache Hive는 디렉토리 기반 접근 방식을 사용했습니다.
메타데이터는 "이 디렉토리에 있는 모든 파일이 테이블/파티션"이라고 정의했으며, 간단하고 널리 사용되었습니다.
그러나 몇 가지 한계가 있었습니다:

  • 작은 수정 작업의 비효율성
  • 여러 파티션의 데이터를 안전하게 수정하지 못함
  • 사용자가 테이블 레이아웃을 직접 알아야 하는 불편함

Hive는 데이터를 HDFS 디렉토리 기반으로 관리하며, 테이블 스키마 정보는 메타스토어에 저장됩니다.

  • 저장 구조:
    • 데이터는 HDFS 상의 특정 디렉토리(예: /user/hive/warehouse/table_name/)에 파일 형식(예: ORC, Parquet)으로 저장됩니다.
    • 파티션 테이블의 경우 각 파티션은 디렉토리로 구분됩니다.
    • Hive는 디렉토리와 파일을 직접 읽고 쓰며, 파일 추가나 삭제 시 메타데이터 갱신은 수동으로 이루어지는 경우가 많습니다(예: MSCK REPAIR TABLE 명령).
  • 특징:
    • 메타데이터와 데이터 파일 간의 강한 연결이 없음.
    • 데이터 일관성 관리가 어렵고, 스냅샷 관리와 같은 고급 기능 지원 부족.
  • 저장 예시
/user/hive/warehouse/table_name/partition_col=value1/
/user/hive/warehouse/table_name/partition_col=value2/

주요 차이점

 

  Hive Iceberg
메타데이터 관리 Hive 메타스토어에서 관리. 디렉토리 기반. JSON/Avro 기반의 메타데이터 파일로 관리.
파일 포맷 ORC, Parquet 등. 디렉토리와 파티션에 직접 저장. ORC, Parquet 등. Iceberg가 파일 관리 및 추적.
파티션 관리 디렉토리 기반의 파티션. 메타데이터 기반의 추상화된 파티션 관리.
스냅샷 및 버전 관리 지원하지 않음. 데이터 스냅샷 및 버전 관리를 지원.
데이터 일관성 수동 관리 필요. 트랜잭션과 ACID 보장을 통해 자동 관리.
성능 최적화 수작업이 필요(예: 컴팩션). 자동화된 테이블 최적화(스냅샷 병합, 정리 등).
사용 목적 단순 데이터 저장 및 쿼리. 고급 데이터 분석 및 관리가 필요한 경우에 적합.

 

 

 

새로운 세대의 테이블 포맷: Apache Iceberg

이제는 새로운 방식이 필요합니다. 최신 테이블 포맷은 파일 기반 접근 방식을 도입해 메타데이터를 파일 단위로 관리합니다.

Apache Iceberg는 Netflix에서 처음 개발되었으며, 다음과 같은 목표를 가지고 있습니다:

  • Hive보다 더 높은 테이블 정확성
  • 빠른 쿼리 플래닝
  • 물리적 데이터 레이아웃에 대해 사용자가 신경 쓰지 않아도 되는 구조

Iceberg는 이러한 구조를 통해 데이터 레이크에서 효율적인 테이블 관리와 높은 성능을 제공합니다.

 

  • 저장 구조:
    • Iceberg는 테이블 데이터를 HDFS에 저장하지만, 메타데이터 파일을 별도로 관리합니다.
    • 메타데이터는 JSON 및 Avro 파일 형식으로 저장되며, HDFS 디렉토리의 특정 위치(예: /user/hive/warehouse/table_name/metadata/)에 저장됩니다.
    • 데이터 파일은 실제 테이블의 데이터와 함께 HDFS에 저장됩니다.
  • 특징:
    • Iceberg는 테이블의 스냅샷  트랜잭션 관리를 지원하며, 메타데이터 파일을 사용해 테이블 상태를 추적합니다.
    • 파티션은 물리적 디렉토리로 관리되지 않고, Iceberg의 메타데이터가 이를 추상화합니다. 따라서 파티션 추가/삭제가 디렉토리 구조와 무관하게 동작합니다.
    • 데이터 파일의 추적, 관리, 삭제가 용이하며, 데이터의 일관성을 보장합니다.
  • 저장 예시
/user/hive/warehouse/table_name/
├── metadata/
│   ├── v1.metadata.json
│   ├── snapshot-12345.avro
│   └── manifest-list-12345.avro
├── data/
│   ├── partition_col=value1/
│   │   └── file1.parquet
│   └── partition_col=value2/
│       └── file2.parquet

 

 

Apache Iceberg 의 구조

Apache Iceberg 테이블은 세 가지 계층으로 구성된 계층적 구조를 가집니다:

  1. 카탈로그(Catalog) 계층
  2. 메타데이터(Metadata) 계층
  3. 데이터(Data) 계층

각 상위 계층은 하위 계층의 정보를 추적하며, 아래에서 위로 설명됩니다.


1. 데이터 계층 (Data Layer)

  • 테이블의 실제 데이터를 저장합니다.
    • 데이터 파일: 실제 데이터를 저장.
    • 삭제 파일: 삭제된 레코드를 기록. Iceberg는 Merge-on-Read 전략을 사용하여, 삭제 파일과 데이터 파일을 병합해 최종 결과를 제공합니다.

2. 메타데이터 계층 (Metadata Layer)

  • 데이터를 추적하고 관리하기 위한 정보가 포함됩니다.
    • 매니페스트 파일 (Manifest Files)
      • 데이터 파일 정보를 추적.
      • 각 데이터 파일의 최소/최대 값과 같은 통계 포함.
      • 데이터 파일 포맷(Parquet, ORC, Avro)을 정의.
    • 매니페스트 리스트 (Manifest Lists)
      • 특정 시점에서 Iceberg 테이블의 스냅샷을 캡처.
      • 매니페스트 파일 목록과 파티션 정보를 포함.
    • 메타데이터 파일 (Metadata Files)
      • 테이블의 스키마, 파티션, 스냅샷, 최신 스냅샷 정보를 포함.
      • Iceberg 테이블이 변경될 때마다 새 메타데이터 파일 생성 및 최신 버전으로 표시.

3. 카탈로그 계층 (Catalog Layer)

  • Iceberg의 모든 데이터 작업은 카탈로그에서 시작.
  • 현재 메타데이터 포인터의 위치를 가리키며, 원자적(Atomic) 연산을 지원해 모든 리더와 라이터가 동일한 테이블 상태를 볼 수 있도록 보장.
  • 카탈로그 백엔드로 Hive Metastore, Nessie, AWS Glue Catalog 등을 사용할 수 있음.

 

4. 주요 구성요소 표

 

계층구성요소파일 종류설명 및 저장 경로

데이터 계층 데이터 파일 Parquet, ORC, Avro - 테이블의 실제 데이터를 저장.
      - 경로: /table_name/data/partition_col=value/file1.parquet
  삭제 파일 Avro - 삭제된 레코드를 기록하는 파일.
      - 경로: /table_name/data/partition_col=value/delete_file1.avro
메타데이터 계층 매니페스트 파일 Avro - 데이터 파일 목록 및 통계를 포함.
      - 경로: /table_name/metadata/manifest_file1.avro
  매니페스트 리스트 Avro - 특정 시점의 스냅샷 캡처(매니페스트 파일 목록 및 위치 포함).
      - 경로: /table_name/metadata/manifest_list1.avro
  메타데이터 파일 JSON - 테이블 스키마, 파티션 정보, 최신 스냅샷 위치 포함.
      - 경로: /table_name/metadata/v1.metadata.json
카탈로그 계층 카탈로그 N/A - 메타데이터 포인터를 관리(데이터 변경 시 최신 메타데이터 파일 참조).
      - 구현: Hive Metastore, AWS Glue, Nessie 등(별도의 저장소에 관리됨).

 

 

Apache Iceberg는 계층화된 구조파일 단위 메타데이터 관리를 통해 데이터 레이크의 효율성을 극대화합니다. 각각의 계층이 역할을 분담하며, 특히 카탈로그와 메타데이터 계층이 테이블 상태를 추적하고 데이터 일관성을 보장하는 핵심적인 역할을 수행합니다.

반응형

'Tools > ETC' 카테고리의 다른 글

Plant UML 기본 사용방법  (0) 2024.07.30