상세 컨텐츠

본문 제목

Iceberg 란 무엇인가?

Data Engineer

by 데이터 개발자 2024. 12. 15. 21:10

본문

Iceberg?

 

Iceberg는 빅데이터 분석을 위한 open table format 중 하나이다.

데이터레이크에서 대규모 데이터를 효율적으로 관리하고 분석할 수 있도록 설계되어 있다.

 

확장성, 성능, 그리고 복잡한 요구사항까지 충족되며 다양한 데이터 레이크 환경에서 동작할 수 있다. (HDFS, S3, Google Cloud Storage..)

 

데이터 엔지니어는 Apache Iceberg를 사용해 대규모 데이터를 빠르고 효율적이고 안정적으로 관리할 수 있다.

특히 Spark, Flink, Hive, Trino 등 다양한 데이터 처리 엔진과 통합하여 사용할 수 있다.

Iceberg에 대한 다양한 기능들을 하나하나 공부해보고 정리해보려고 한다.

 

 

Iceberg의 장점

다양한 장점과 이점들이 있지만 AWS에 정리된 문서를 기반으로 정리해봤다.

 

  • SQL을 사용해 데이터 레이크 작업이 가능하다
  • 데이터 일관성 보장
  • 데이터 구조 (Schema evolution)
    • add, drop, update, rename (no side-effects)
  • 데이터 버전 관리
  • 크로스 플랫폼 지원 (Spark, Hive, Presto..)
  • 증분 처리 (변경된 데이터만 처리, CDC..)
  • Hidden Partitioning
  • Time Travel
  • ...

 

정말 다양한 기능들을 제공하는 Table format으로 parquet와 함께 다양한 비즈니스 요구사항과 많은 기술적인 문제들을 해결해 줄 수 있다.

특히 CDC를 활용한 증분데이터 처리가 매우 기대가 된다.

 

저장 된 파일들을 update 하거나 변경이 필요한 부분을 처리해주는 기능... 실무 레벨에서 꼭 사용해보려고 한다

 

 

Iceberg의 구성 요소

Iceberg는 데이터를 디렉토리 단위로 관리하는 것이 아닌 테이블에 포함된 개별 데이터 파일을 관리한다.

 

Metadata

테이블의 상태를 관리하기 위해 메타데이터를 사용한다.

메타데이터는 스키마, 파티션 정보, 데이터 파일 위치, 스냅샷 정보 등 파일의 메타데이터를 포함하고 있다.

테이블 상태가 바뀔때마다 새로운 메타데이터를 생성하고 이를 atomic swap 방식으로 대체 

(atomi : 변경 작업의 중단 없이 한번에 발생. 데이터 손상 & 불일치 방지)

 

Snapshot

테이블의 스탭샷을 생성하여 변경 이력과 히스토리를 관리한다.

각 스냅샷은 데이터 파일의 상태와 메타데이터를 참조하게 된다.

스냅샷을 통해 특정 시점의 데이터로 되돌아가거나 변경 이력을 추적할 수 있다

 

Manifest file

매니페스트 파일들의 집합(스냅샷)을 관리하는 파일이다.

매니페스트 파일에는 각 테이블에 대한 정보가 있다.

 - 파일의 파티션 정보, 메트릭(파일 크기, 행 수 등..)

 - 스냅샷의 데이터는 매니페스트에 포함된 모든 파일들의 합집합이다.

 

Manifest file list

매니페스트 파일들의 스냅샷을 관리하는 파일 (매니페스트 파일의 메타데이터)

 

Data File

명시적인 commit 과정을 통해 테이블에 추가되므로 데이터의 일관성이 보장된다

=> ACID 트랜잭션을 지원하여 데이터 일관성과 무결성을 보장한다.

실제 데이터가 저장되는 것이며 Parquet, Avro, ORC 같은 file format으로 저장된다. 

 => Parquet File format을 Iceberg Table format으로 관리한다

각 데이터 파일은 Metadata에 의해 관리된다.

 

 

정리 & 느낀점

파일 포맷이지만 DB에서 지원할법한 다양한 기능들을 지원해서 놀랍다.

이제는 S3, HDFS에 저장된 parquet 데이터를 Iceberg를 사용해 lakehouse를 구축하여 확장성있게 사용하는 것이 가능하다.

실시간 데이터 처리와 복잡한 비즈니스 요구사항을 해결할 수 있는 다양한 확장성과 많은 문제를 해결할 수 있을 것 같다.

 

이제 Spark 등 다양한 환경에서 사용해보면서 하나하나 공부해보려고 한다

관련글 더보기