Apache Iceberg: почему вокруг него столько шума и зачем он вообще нужен 🧊
Apache Iceberg — это открытый формат таблиц для огромных аналитических наборов данных в data lake.
И если раньше архитектуры на базе Hadoop и Hive нередко превращались в болото данных, то Iceberg придумали как способ сделать такие хранилища более надежными, быстрыми и удобными для аналитики.
Что такое Apache Iceberg 🤨
Важно сразу понять одну вещь: Iceberg — это не хранилище вроде S3 или HDFS и не движок обработки запросов вроде Spark или Trino.
Это спецификация и набор библиотек, которые отвечают за то, как организованы файлы данных и метаданные. Благодаря этому поверх объектного хранилища можно получить поведение, похожее на работу обычной аналитической базы.
У Iceberg есть несколько сильных сторон 🤔:
ACID-транзакции — читатели не видят частичные или некорректные изменения, а каждое обновление проходит как атомарный коммит.
Time Travel — можно запросить состояние таблицы на конкретный момент времени или по номеру снапшота.
Эволюция схемы без боли — столбцы можно добавлять, переименовывать и удалять без переписывания всей таблицы.
Скрытое партиционирование — Iceberg сам помогает с раскладкой данных по папкам, и не требует вручную постоянно тащить это в запросы.
Главная идея Iceberg — он отслеживает не каталоги, а отдельные файлы данных.
Именно поэтому он так хорошо работает с большими таблицами и сложными сценариями обновлений.
Архитектура Iceberg состоит из трёх слоёв 💠:
1. Catalog layer
Это внешний сервис, который хранит ссылку на текущий файл метаданных таблицы. В этой роли могут выступать Hive Metastore, AWS Glue или REST-каталог подробнее про роль каталога.
2. Metadata layer
Здесь хранится вся логика таблицы:
🔷metadata file — схема, информация о партиционировании и список снапшотов;
🔷manifest list — набор файлов-манифестов для конкретного снапшота;
🔷manifest file — список файлов данных и статистика по ним, включая min/max значения, чтобы движки могли пропускать лишнее при чтении.
3. Data layer
Это сами файлы данных, чаще всего Parquet, которые лежат в объектном хранилище или в HDFS.
Когда Iceberg действительно нужен 🧑💻
🔷data lake уже тормозит из-за миллионов файлов;
🔷важна изоляция чтения и записи;
🔷схема таблиц часто меняется;
🔷не хочется каждый раз переписывать терабайты данных из-за очередного изменения структуры.
Проще говоря, Apache Iceberg превращает файловое хранилище в полноценную аналитическую систему, но без потери плюсов object storage — дешевизны и масштабируемости
Вы уже пробовали Iceberg? Как вам?🙂
Apache Iceberg — это открытый формат таблиц для огромных аналитических наборов данных в data lake.
И если раньше архитектуры на базе Hadoop и Hive нередко превращались в болото данных, то Iceberg придумали как способ сделать такие хранилища более надежными, быстрыми и удобными для аналитики.
Что такое Apache Iceberg 🤨
Важно сразу понять одну вещь: Iceberg — это не хранилище вроде S3 или HDFS и не движок обработки запросов вроде Spark или Trino.
Это спецификация и набор библиотек, которые отвечают за то, как организованы файлы данных и метаданные. Благодаря этому поверх объектного хранилища можно получить поведение, похожее на работу обычной аналитической базы.
У Iceberg есть несколько сильных сторон 🤔:
ACID-транзакции — читатели не видят частичные или некорректные изменения, а каждое обновление проходит как атомарный коммит.
Time Travel — можно запросить состояние таблицы на конкретный момент времени или по номеру снапшота.
Эволюция схемы без боли — столбцы можно добавлять, переименовывать и удалять без переписывания всей таблицы.
Скрытое партиционирование — Iceberg сам помогает с раскладкой данных по папкам, и не требует вручную постоянно тащить это в запросы.
Главная идея Iceberg — он отслеживает не каталоги, а отдельные файлы данных.
Именно поэтому он так хорошо работает с большими таблицами и сложными сценариями обновлений.
Архитектура Iceberg состоит из трёх слоёв 💠:
1. Catalog layer
Это внешний сервис, который хранит ссылку на текущий файл метаданных таблицы. В этой роли могут выступать Hive Metastore, AWS Glue или REST-каталог подробнее про роль каталога.
2. Metadata layer
Здесь хранится вся логика таблицы:
🔷metadata file — схема, информация о партиционировании и список снапшотов;
🔷manifest list — набор файлов-манифестов для конкретного снапшота;
🔷manifest file — список файлов данных и статистика по ним, включая min/max значения, чтобы движки могли пропускать лишнее при чтении.
3. Data layer
Это сами файлы данных, чаще всего Parquet, которые лежат в объектном хранилище или в HDFS.
Когда Iceberg действительно нужен 🧑💻
🔷data lake уже тормозит из-за миллионов файлов;
🔷важна изоляция чтения и записи;
🔷схема таблиц часто меняется;
🔷не хочется каждый раз переписывать терабайты данных из-за очередного изменения структуры.
Проще говоря, Apache Iceberg превращает файловое хранилище в полноценную аналитическую систему, но без потери плюсов object storage — дешевизны и масштабируемости
Вы уже пробовали Iceberg? Как вам?🙂