본문 바로가기
Database

Apache Iceberg

by BTC_Crong 2024. 4. 8.

베하~! 안녕하세요 1-Tier팀 입니다.

이번에는 대규모 데이터 레이크 관리를 위한 오픈소스인 Apache Iceberg에 대해 알아보겠습니다.

Apache Iceberg

Apache Iceberg는 페타바이트 기반의 데이터를 위한 오픈소스로, Netflix에서 개발하여 2020년부터 오픈소스로 사용되었습니다.

Apache Iceberg는 데이터 레이크에 저장된 대규모 데이터 세트를 테이블로 관리할 수 있고 데이터 처리를 위한 지원을 해준다는 것입니다.

기존 Apache Hive 기반의 빅데이터 처리 방식은 ACID 트랜잭션을 지원하지 않아 데이터의 일관성과 무결성 보장을 하지 않았지만, Apache Iceberg는 ACID를 보장하여 데이터의 일관성과 무결성을 보장할 뿐만 아니라 데이터 변경 시 레코드 단위로 수정/삭제가 가능하여 대량의 데이터를 전부 re-write할 필요가 없고, 실시간으로 데이터 변경을 처리하여 스트리밍 데이터 같은 실시간 데이터 수집과 분석이 동시에 이루어 지는 작업에 적합합니다.

 

Apache Iceberg 장점

SQL

Iceberg는 SQL 문으로 여러가지 작업을 수행할 수 있습니다.

 

데이터 일관성

Apache Iceberg는 데이터 ACID를 준수하기 때문에 모든 사용자가 동일한 데이터를 읽고 쓸 수 있습니다.

 

데이터 구조

테이블 변경이 발생하면 전체 데이터를 다시 쓸 필요 없이, 필요한 열만 추가하거나 변경, 삭제가 가능합니다.

 

데이터 버전 관리

Time Travel 기능을 지원하여 데이터의 시간에 따른 변경 내역을 추적할 수 있으며 이전 버전의 데이터에 액세스하여 쿼리하거나 삭제된 부분을 확인할 수 있고 롤백도 가능합니다.

 

크로스 플랫폼 지원

다양한 스토리지 시스템과 쿼리엔진을 지원하며 하나의 테이블 데이터를 Spark, Hive, Presto 등 여러 엔진을 이용하여 쿼리할 수 있고 AWS의 Athena, EMR, Glue, Redshift 등에서 데이터를 Iceberg를 이용하여 데이터를 쿼리할 수 있습니다.

 

Apache Iceberg 구성 요소

Catalog Layer

metadata pointer로서 가장 최신 시점의 테이블 상태, 즉 최신 metadata file의 위치 정보를 가지고 있습니다.

 

Metadata Layer

Iceberg는 테이블에 변경이 일어나는 시점마다 metadata file과 snapshot을 만듭니다. metadata file에는 테이블에 대한 변경사항이 기록되는데 예를 들어 테이블 스키마, 파티셔닝, 스냅샷 세부정보 등이 포함되어 있습니다. 스냅샷은 특정 시점의 테이블 상태를 나타냅니다.
스냅샷에 포함된 data file들의 metadata와 변경사항 추적은 manifest file에 기록됩니다. 이 manifest file들을 관리하는 것이 manifest file list입니다. manifest file list는 스냅샷 당 1개씩 존재합니다.
metadata file은 snapshot의 manifest file list를 참고하여 어떤 manifest file로 원하는 data file을 쿼리할 수 있는지 확인합니다.

 

Data Layer

실제로 데이터가 저장되어 있는 레이어로, 파일 형식으로 저장되어 있습니다.  v2 부터는 데이터에 변경사항이 있을 때 기존의 data file에 변경사항을 반영한 후 새로 write하는 방식(Copy-On-Write)뿐만 아니라, 데이터 변경분만 새로 write하여 기존 data file과 병합하여 읽는 방식(Merge-On-Read) 모두 지원합니다

Iceberg를 AWS에서 사용하기

AWS에서 제공하는 다양한 분석 서비스를 통해 Apache Iceberg를 사용할 수 있습니다.

Glue Data Catalog를 사용하여 Iceberg 테이블을 중앙 관리하며 AWS의 여러 분석 서비스에서 Glue Data Catalog에 저장되어있는 테이블을 참조하여 데이터레이크에 대한 트랜잭션을 처리할 수 있습니다.

'Database' 카테고리의 다른 글

Elastic의 벡터 서치를 위한 HNSW와 다중 계층 기능  (0) 2024.04.30
[Mysql] 프로시저 기초 사용법  (1) 2024.03.07
[GA4] 이벤트란?  (0) 2024.01.18
Redis의 Node와 Shard  (1) 2024.01.05
MySQL 일일 단위 백업 자동화  (0) 2023.12.29

댓글