Developers Haven

(DH)블로그는 개발자들이 기술 정보를 찾아볼 수 있는 안식처가 되고 싶음을 희망하여 시작하게 되었습니다. 공부한 내용과 성장 과정을 기록해두었으니 편히 둘러보시길 바랍니다.

Welcome to DH's Blog

[기술공부]/Data

Apache Iceberg란 무엇일까?

DH’s Blog 2023. 10. 11. 18:01
반응형

 

 

현재 빅데이터 솔루션 기업에서 Data Architect로 근무하면서, 새로운 기술이 우리 회사의 솔루션에 적용될때마다 자연스레 많은 기술 공부의 기회를 얻고 있다. 작년에 진행한 프로젝트에서 Iceberg 테이블을 사용하게 되었고, 속도나 성능면에서 하이브와의 차이점을 느낄 수 있었다. 또한, 컨퍼런스를 통해 많은 국내외 기업(Ex. 스노우플레이크, 라인)들이 Iceberg를 도입하고 있는 것을 보면서 데이터 생태계에서 Iceberg가 중요한 기술이 되고 있음을 느끼게 되었다. 이번 기회에 Iceberg에 대해서 자세히 알아보고 그동안 배웠던 것들을 정리해보려고 한다.

 

 

 


Apache Iceberg의 등장

기존의 Apache Hive에서 대용량 데이터를 다룰 때에 '규모/성능/사용성'에 대한 문제가 존재했고 이를 해결하기 위해 등장하게 되었다. 그 이름도 유명한 Netflix에서 개발되어 Apache 인큐베이터 프로젝트로 오픈소스화했고 2~3년에 걸쳐서 인큐베이터 프로젝트를 마무리하게 되었다. 클라우드, 스토리지, 컴퓨팅 엔진 등의 종류와 상관없이 대량의 데이터를 쉽게 다룰 수 있기 때문에 많은 기업에서 Iceberg 테이블 포맷 형식을 도입하게 되었다.

 

* Apache 인큐베이터 프로젝트란?

- Apache Software Foundation(아파치 소프트웨어 재단)의 소속이 되기 위한 오픈 소스 프로젝트를 의미하며, 그 중에서도 성과가 좋은 프로젝트는 Top-Level 프로젝트로 선정된다. 

 

 

 

간단히 요약하자면 Iceberg는 오픈 소스 테이블 포맷을 의미하며 구조상 대용량 데이터를 쉽게 다룰 수 있는 이점이 있는데, Iceberg의 구조와 특징에 대해 자세히 알아보도록 하자.

 

 

 

Iceberg 구조

Iceberg는 크게 data layer, metadata layer, iceberg catalog로 계층적인 구조를 이루며 하나씩 배워보도록 하자.

출처 - Apache Iceberg 공식문서

# Iceberg catalog

catalog는 특정 데이터 소스에 접근을 가능하게 만들어주는 설정으로, Iceberg catalog는 현시점의 테이블 metadata를 찾을 수 있게 도와준다(with metadata pointer). 그리고 쿼리가 실행되면 해당 쿼리가 찾는 metadata file을 찾기위해 사용된다.

 

 

# metadata layer

1. metadata file

  • 테이블 형상은 metadata file로 관리되며, 테이블 내용에 변경이 생기면 새로운 metadata file이 만들어지고 기존의 것을 대체한다.
  • Iceberg는 스냅샷 기능을 통해 특정 시점의 테이블 형상을 파일로 기록해주는데, 이는 특정 시점에 대한 rollback이 가능하게 해준다. metadata file은 스키마, 파티션, 스냅샷에 대한 정보를 가지고 있다.

 

 

2. manifest list

  • 스냅샷(=특정 시점의 테이블 형상을 기록한 파일)은 하나의 manifest list를 참조하며, manifest list는 하나 이상의 manifest file에 대한 메타 정보를 저장하고 있다.
  • 쉽게 생각하면, manifest list를 통해 스냅샷과 연관된 manifest file 위치를 찾아내는 것이다.

 

 

3. manifest file

  • 결국, 스냅샷은 하나 이상의 manifest file로 이루어지게 된다.
  • manifest file은 data file에 대한 모든 정보(ex. data file 위치, 파티션 정보)와 통계 정보(ex. null, nan 개수)를 가지고 있다.

 

 

# data layer

  • 실제 데이터 파일을 저장하는 곳으로, 테이블에 정의된 파일 포맷(ex. parquet, orc) 형식으로 데이터 파일을 저장해준다.
  • manifest file의 메타 정보를 이용하여 필요한 데이터 파일에 접근할 수 있게 된다.

 

 

정리해보면 Iceberg는 metadata --> manifest를 거쳐서 원하는 데이터를 쉽게 찾을 수 있다. 만약 특정 파티션 값의 데이터를 조회하는 쿼리가 실행된다면 (manifest list의 파티션 정보로 필터링 --> 필터링된 manifest)를 거쳐서 데이터 파일을 가져올 수 있다. 이러한 점 덕분에 데이터를 더 빠르게 조회하고 사용할 수 있다는 것이 가장 큰 장점이라 할 수 있다.

 

 

 

 

 


 

이 내용을 처음 접한다면 Iceberg의 구조가 다소 생소할 수 있지만, 서로 연결된 파일을 가지고 원하는 데이터를 쉽게 찾아가는 구조라고 먼저 이해하면 쉬울 것이다. 나도 처음 Iceberg를 접할때는 metadata가 대체 무엇이고 어떻게 사용되는지 이해가 어려웠는데, 위 구조의 흐름을 한번 읽고 나면 많은 도움이 될 수 있을 것이다. 이번 시간에는 Iceberg의 구조에 대해서 알아보았고 기존 Hive와의 차이점과 특징에 대해서는 다음 시간에 알아보도록 하자.

 

 

 

 

반응형