BI Consult Desktop Logo BI Consult Mobile Logo
  • Russian BI Исследование российских bi
  • Перейти на Fine BI
  • Контакты
  • +7 812 334-08-01
    +7 499 608-13-06
  • Отправить сообщение
  • Главная
  • Продукты Эксперт-BI
    • Дистрибуция
    • Розничная торговля
    • Производство
    • Операторы связи
    • Страхование
    • Банки
    • Лизинг
    • Логистика
    • Нефтегазовый сектор
    • Медицина
    • Сеть ресторанов
    • E-Commerce
    • Сельское хозяйство
    • Энергетика
    • FMCG
    • Девелоперы
    • Маркетплейсы
    • Пищевая промышленность
    • Фармацевтика
    • Построение Data Platform
    • Цифровая трансформация
    • Управление по KPI
    • Финансы
    • Продажи
    • Склад
    • HR
    • Маркетинг
    • Внутренний аудит
    • Категорийный менеджмент
    • S&OP и FP&A
    • Геоаналитика
    • Цепочки поставок (SCM)
    • AutoML
    • Process Mining
    • IBP
    • ИТ (CIO)
    • Закупки
  • Платформы
    • Системы бизнес-анализа (BI)
    • Интегрированное бизнес-планирование (IBP)
    • Хранилища данных (DWH / Lakehouse)
    • Каталоги данных (Data Catalog)
    • Системы ETL и ELT
    • AI / Исскуственный интеллект
    • Шина данных (ESB)
    • Система управления мастер-данными (MDM)
    • Семантический слой
  • Услуги
    • Переход на отечественные BI и DWH системы
    • Консалтинг
    • Пилотный проект
    • Обучение и сертификация
    • Бесплатное обучение
    • Поддержка
    • Технические задания
    • Сбор требований для проекта внедрения BI-системы
    • CI/CD для DWH
    • Аудит BI приложений и DWH
    • Выделенная команда
    • Настойка и поддержка баз данных
    • Разработка BI Стратегии
    • Styleguide для BI-системы
    • Как выбрать BI-систему
  • Курсы
    • Учебный курс Информационная грамотность (Data Literacy)
    • Учебный курс для бизнес-аналитиков
    • Учебный курс для системных аналитиков
    • Учебный курс по Data Governance
    • Учебный курс Как стать CDO
    • Учебный курс Современная архитектура хранилища данных
    • Учебный курс по Fine BI
    • Учебный курс по FineReport
    • Учебный курс по DWH
    • Учебный курс по Data Science (ML, AI)
    • Учебный курс по PostgreSQL
    • Учебный курс по Greenplum
    • Учебный курс по Apache Airflow и NiFi
    • Учебный курс по Open-source BI
    • Учебный курс по ClickHouse
    • Учебный курс по DataLens
    • Учебный курс по Loginom
    • Учебный курс по Modus BI и ETL
    • Учебный курс по Visiology
    • Учебный курс по dbt (Data Build Tool)
  • Компания
    • Руководство
    • Новости
    • Клиенты
    • Карьера
    • Скачать
    • Контакты

BI

  • FineBI
  • FineReport
  • FineDataLink
  • FineChatBI (FineAI)
  • Коннекторы данных из 1С в BI
  • Airflow / Nifi
  • Visiology
  • PIX BI
  • Modus BI
  • Yandex.DataLens
  • Open-source BI: Superset/Metabase
  • Luxms BI
  • AW BI + Alpha BI
  • FlyBI + Форсайт. Аналитическая Платформа
  • Loginom
  • Триафлай
  • AI / Исскуственный интеллект
  • Optimacros
  • Навигатор BI
  • Семантический слой

СУБД

  • Arenadata
  • ClickHouse
  • Greenplum
  • Postgres Professional
  • TData

Другое

  • Построение Data Platform
    • Аналитическое хранилище данных
    • Data Lake и Data Engineering
    • Подробнее про Data Lake
    • Внедрение Lakehouse
      • Apache Doris
      • StarRocks
      • Trino
    • Миграция витрин из пропиетарных DWH на новый стек
    • Учебный курс "Современная архитектура хранилища данных"
Главная » Курсы по системам бизнес-анализа и методологии » Учебный курс Современная архитектура хранилища данных » Apache Iceberg: архитектура, метаданные, каталоги и транзакции в контексте Trino - концептуальный обзор

Apache Iceberg: архитектура, метаданные, каталоги и транзакции в контексте Trino - концептуальный обзор

 

Введение: контекст Iceberg, Trino, Catalog и цели статьи

Современные архитектуры обработки больших данных требуют единых стандартов для управления метаданными, версиями таблиц, схемами и перемещением парадигм хранения. В этом контексте Apache Iceberg выступает как открытый формат для больших табличных хранилищ, предоставляющий строгие guarantees версионирования, управление схемами и эффективное сканирование. В связке с распределённым SQL-движком Trino и разнообразными каталогами метаданных Iceberg становится основой для единообразной работы с табличными данными в разных средах - на HDFS, в облаке и в гибридных сценариях.

Цели данной статьи - выстроить целостную концептуальную карту: какие принципы лежат в основе Iceberg, какие архитектурные компоненты образуют его ядро, как Таблица Iceberg моделируется в API, как работают каталоги и какие механизмы обеспечивают транзакции, time travel, эволюцию схем и скрытое партиционирование. В контексте Trino рассматриваются также вопросы интеграции через SPI (Service Provider Interface), загрузку плагинов, совместимость версий и реализацию пользовательских Catalogs. В итоге читатель получает подробное представление о том, как проектировать, разворачивать и эксплуатировать Iceberg в реальных корпоративных средах, включая риски и пути эволюции архитектуры.

Iceberg задаёт границы между логическим представлением данных и их физическим хранением. Это позволяет разделить вопросы моделирования данных, которые решаются на уровне схем и partitioning, от реальной организации файловой системы и форматов хранения. В рамках Trino Iceberg предоставляет коннектор, который через Java API обращается к Catalog и ко всем компонентам Iceberg. Важно понимать, что Catalog - это не просто хранилище адресов таблиц; это слой абстракций над различными метаданными репозиториями: Hive Metastore, Nessie, Glue, REST-каталог и многое другое. Такую конструкцию можно рассматривать как универсальный интерфейс к метаданным, который позволяет определить, как таблица создаётся, как она находится и как версии её метаданных доступны вычислительным движкам.

Структура статьи движется от общих концепций к практическим аспектам: сначала заложим теоретическую базу и принципы управления метаданными, затем разберём архитектуру Iceberg и жизненный цикл объектов таблицы, после чего рассмотрим каталоги и механизмы метаданных, эволюцию схем, типы данных, чтение и запись, блоки транзакций, версии и ветки, метаданные как таблицы, фильтрацию и оптимизацию, архитектуру плагинов Trino и практику разработки кастомных компонентов. В завершение - примеры реального применения, риски, ограничения и сравнительный анализ с Delta Lake и Apache Hudi.

 

Теоретические основы Iceberg: принципы управления метаданными, time travel, эволюция схем и скрытое партиционирование

Iceberg строится вокруг управляемой схемы метаданных. В базовом наборе понятий лежат:

  • Schema и PartitionSpec: определяют структуру данных и способ их разделения по данным файлам. Эволюция схем и партисипации допускается без нарушения совместимости запросов, что критично для больших коллекций данных.
  • Snapshot, History, Manifests и DataFiles: снимки состояния таблицы на конкретный момент времени, журнал изменений и наборы файлов данных. Эти сущности образуют временную шкалу таблицы и позволяют осуществлять Time Travel - возвращение к предыдущему состоянию данных.
  • Time Travel и версия управления: возможность чтения данных по конкретному снимку или по состоянию на определённое время. Это достигается за счёт механизма сохранения снимков и их связей через историю изменений.
  • Скрытое партиционирование: Iceberg способен автоматически вычислять и использовать партиционирование без явной привязки к каждому запросу. Это упрощает разработку и уменьшает риск ошибок, связанных с неверной конфигурацией партиций, а также позволяет менять стратегию партиционирования со временем без разрушения существующих запросов.
  • Поддержка множественных форматов и расширяемость: Iceberg поддерживает Parquet, ORC, Avro и другие форматы за счёт модульной архитектуры типов и файловых форматов. Это позволяет вычислительным движкам эффективно обрабатывать данные в памяти и на диске, а также интегрировать Iceberg в разные экосистемы.

Эти принципы определяют стратегию хранения и обработки, когда принято решение о хранении метаданных отдельно от самих файлов данных, что позволяет централизованно управлять версиями, схемами и правилами доступа. В контексте архитектуры Iceberg, time travel и схема эволюции не являются нишевыми фичами, а являются фундаментальными механизмами, которые поддерживают устойчивую долговременную эксплуатацию больших наборов данных.

 

Архитектура Apache Iceberg: ключевые компоненты и их взаимодействие

Ключевые компоненты Iceberg включают таблицу как основной объект управления, таблицные операции, каталоги (catalogs), схемы данных, манифесты, файлы данных и метаданные. Взаимодействие между ними обеспечивает последовательную логику:

  • Table и TableOperations: основной интерфейс к таблице, в котором отражаются состояние схемы, текущий снимок и жизненный цикл объектов. TableOperations - низкоуровневый абстракционный слой для реализации каталога и управления метаданными.
  • Catalog: механизм хранения и поиска метаданных таблиц. Каталоги могут быть HiveMetastore-based (HiveCatalog), файловыми (HadoopCatalog), облачными (Glue), а также сторонними вариантами, включая Nessie (исторический гиперкаталог) и REST-каталог. Каталог абстрагирует доступ к любой системе хранения метаданных.
  • Schema, PartitionSpec, SortOrder: компоненты, описывающие столбцовую структуру, политику партиционирования и порядок сортировки файлов. Эти элементы играют центральную роль в планировании сканирования и эффективном выполнении запросов.
  • Snapshot, History, Manifests, DataFiles: снимки состояния таблиц, запись их истории и описания наборов файлов. Manifests агрегируют данные файлов и служат для быстрой перестройки плана сканирования.
  • File IO и LocationProvider: абстракции чтения и записи файлов, а также механизм определения базовых путей к данным и метаданным. Эти классы позволяют внедрять кастомные реализации FileIO и локаторов местоположения, интегрируясь с конкретной файловой системой.
  • Expressions, Types и Metrics: инструменты для построения выражений фильтрации, определения типов данных и сбора статистики на уровне столбцов, что критически важно для предикатного пушдауна и ускорения сканирования.
  • Метаданные как таблицы: SnapshotsTable, HistoryTable, DataFilesTable, ManifestsTable и аналогичные модули позволяют оперировать внутренним состоянием Iceberg как обычной таблицей.

Эти модули образуют слоистую архитектуру: на верхнем уровне - пользовательские интерфейсы API (Table, Snapshot, Scan), на среднем - каталоги и транзакции, на нижнем - FileIO, LocationProvider и данные о метаданных. Взаимосвязи между слоями обеспечивают атомарность изменений, возможность отката и консистентность состояния в рамках многопоточной и распределённой среды.

 

Таблица Iceberg: интерфейс Table, TableOperations и жизненный цикл объектов

Основной контракт Iceberg для программного доступа к таблице задаётся через интерфейс Table. Он предоставляет:

  • текущую схему (getSchema) и текущую спецификацию партиционирования (getPartitionSpec);
  • свойства таблицы (getProperties) и текущее состояние, например currentSnapshot;
  • доступ к всем валидным снимкам (snapshots) и к конкретному снимку по id или по location;
  • метод refresh, который обновляет объект таблицы до последней версии согласно каталогу;
  • доступ к FileIO и LocationProvider для чтения/записи и формирования путей к файлам.

TableOperations представляет собой низкоуровневый слой, который инкапсулирует логику обращения к каталогу и файловой системе. Он отвечает за чтение и запись метаданных, создание и изменение таблицы, а также за управление локаторами. В реальной реализации TableOperations появляется через Catalog.newTableOps(TableIdentifier) при создании пользовательского каталога или при взаимодействии с существующей таблицей.

Жизненный цикл объектов в Iceberg можно очертить так:

  • Создание таблицы через Catalog.createTable, с указанием идентификатора (TableIdentifier) и схемы (Schema) плюс спецификации партиционирования (PartitionSpec).
  • Загрузка существующей таблицы через Catalog.loadTable.
  • Получение Table и запуск Table.newScan() для конфигурации сканирования (фильтры, проекции) и планирования задач.
  • Внесение изменений через механизмы обновления (updateSchema, updateSpec, expireSnapshots и др.) с фиксацией через commit.
  • Осуществление транзакций на уровне таблицы, включая последовательности операций (AppendFiles, OverwriteFiles и т. д.) и последующий commitTransaction.

Эти механизмы обеспечивают единый и атомарный набор операций над метаданными и данными таблицы, что важно для консистентности в условиях высокой конкуренции на запись и масштабирования вычислительных процессов.

 

Каталоги Iceberg: HiveCatalog, HadoopCatalog, Glue, Nessie, REST и пользовательские каталоги

Каталоги реализуют хранение и поиск метаданных таблиц. Среди наиболее распространённых реализаций:

  • HiveCatalog: интеграция с Hive Metastore. Позволяет использовать Hive Metastore как центральный источник метаданных Iceberg и обеспечивает совместную работу с существующим экосистемным стеком. HiveCatalog реализует интерфейс Catalog и предоставляет методы createTable, loadTable, renameTable и dropTable.
  • HadoopCatalog: файловый каталог, который не требует Hive Metastore и опирается на файловую систему (HDFS, локальная FS и пр.). Обеспечивает атомарные операции rename в рамках поддерживаемых файловых систем. Применим, когда требуется простая интеграция без зависимости от Hive Metastore.
  • Glue Catalog: интеграция с AWS Glue Metastore для управления метаданными Iceberg в облаке. Это позволяет работать в рамках облачных сред и управлять метаданными на масштабе AWS.
  • Nessie Catalog: модуль для интеграции с Nessie - системой управления версиями метаданных Iceberg. Nessie обеспечивает хранение истории и ветвление метаданных как часть унифицированной системы управления данными. Это особенно полезно для ретенционистских политик и длительного аудита.
  • REST Catalog: способ доступа к Iceberg через REST API к каталогу. Такой подход облегчает интеграцию с удалёнными или управляемыми каталогами, а также упрощает взаимодействие между сервисами.
  • Пользовательские каталоги: Iceberg допускает реализацию собственных Catalogs, что позволяет предприятии соединить Iceberg с внутренними системами метаданных, сервисами каталогов и корпоративными политиками. Реализация пользовательского каталога требует создания TableOperations и соответствующего класса Catalog с инициализацией, настройкой и реализацией основных методов.

Важно: архитектура плагинов включает загрузку Catalog через Service Provider Interface (SPI) и обеспечивает изоляцию зависимостей между различными коннекторами и каталогами. В Spark и Flink каталоги могут загружаться динамически, а конкретная реализация указывается через свойства конфигурации.

 

Метаданные и состояния таблиц: Snapshots, History, Manifests, DataFiles и их роль в управлении версиями

Метаданные Iceberg описывают состояние таблиц во времени и позволяют возвращаться к предыдущим версиям. Ключевые элементы:

  • Snapshots: снимки состояния таблицы на конкретный момент времени. Каждый снимок фиксирует набор данных, их путь и часть метаданных, что обеспечивает возможность Time Travel.
  • History: хронология снимков и изменений, связанная с ветками и тегами, позволяющая понять, как таблица эволюционировала.
  • Manifests: список файлов данных и их прочтения. Манивесты помогают ускорить планирование сканирования, потому что они агрегируют данные и ведут к эффективной фильтрации.
  • DataFiles: сами данные-файлы, которые хранят данные столбцов. Точные пути к файлам, размер, статистика и другие признаки - часть метаданных.
  • DeleteFiles и ContentFiles: представляют удаляемые записи и дополнительные файлы контента, обеспечивая корректную обработку изменений и удаления.

Роль этих элементов в управлении версиями заключается в том, чтобы каждая операция над таблицей - добавление, удаление или изменение - фиксировалась в снимке. Это создаёт полноту аудита, возможность отката и детальное восстановление состояния таблицы в любой момент времени. Именно благодаря этому Iceberg обеспечивает эффективное time travel и безопасные обновления данных в условиях параллельной записи и больших объёмов данных.

 

Схема, партиционирование и эволюция структуры: Schema, PartitionSpec, SortOrder, преобразование схем

Эти три блока образуют основу структурированности таблиц:

  • Schema: определение столбцов, их типов и nullability. В Iceberg типы данных находятся в модуле iceberg-types и включают примитивные типы, структуры (Struct), карты (Map) и списки (List) с поддержкой вложенных полей (NestedField). Эволюция схемы допускается через операцию updateSchema с сохранением совместимости и корректной миграции.
  • PartitionSpec: политика партиционирования, описывающая, по каким признакам данные разделяются на файлы. Iceberg поддерживает функциональные возможности, такие как hour, day, year для временных полей и категориальные поля для ускорения запросов. Важной особенностью является скрытое партиционирование - Iceberg рассчитывает значения партиционирования автоматически, и запросы не требуют явной привязки к партициям. Это снижает риск ошибок и упрощает поддержание схем.
  • SortOrder: порядок сортировки внутри файлов, который может влиять на эффективность сканирования и упорядочение данных по критериям чтения.
  • Преобразование схем: преобразование схемы из Avro, Spark и других форматов поддерживает конвертеры (AvroSchemaUtil, SparkSchemaUtil), что позволяет быстро адаптировать внешние данные к Iceberg. При создании таблицы ID полей в схеме переназначаются для обеспечения уникальности, а конвертация обеспечивает корректное соответствие структур.

Эволюция схем и партиционирование - ключевые механизмы, позволяющие адаптировать структуру таблиц к растущим требованиям бизнеса и данными. Iceberg обеспечивает безопасное изменение схему и партиционирования без дорогих миграций, сохраняя неизменной логику запросов и совместимость результатов.

 

Типы данных и структуры: Types, Struct, Map, List, NestedField, nullability

Типы Iceberg реализованы в модуле iceberg-types и включают примитивные типы, а также составные структуры. Примеры:

  • StructType и NestedField: структурированные поля внутри таблицы, где вложенные поля имеют идентификаторы и признак nullability.
  • MapType и ListType: коллекции, которые также поддерживают вложенные поля, что важно для гибких схем и сложной сериализации.
  • Нулability: для полей и элементов коллекций управление допускаемостью значений реализуется через методы типа NestedField и фабричные конструкторы, например NestedField.optional и NestedField.required.
  • Примеры конструкций:
    • Struct: состоит из полей id (обязательное), data (опциональное) и др.
    • Map: ключи и значения могут иметь различную нуличность и типы.
    • List: элементы могут быть обязаны или опциональны, с указанием типа элементов.

Эти конструкции обеспечивают богатые способы моделирования данных в Iceberg, поддерживая сложные и вложенные схемы, что особенно актуально для современных доменов данных.

 

Чтение и запись: TableScan, ScanTask, планирование файлов и задач, проекции и time travel

Чтение и запись в Iceberg реализуются через конфигурацию TableScan и сопутствующих объектов:

  • TableScan: точка входа в чтение таблицы. После создания через table.newScan() можно применить фильтры через filter, выбрать проекции через select, и затем получить Schema projection и Iterable для планирования задач.
  • ScanTask и CombinedScanTask: задачи чтения, которые планируются и выполняются движком обработки данных. Iceberg возвращает набор файлов, из которых движок должен читать данные.
  • Планирование файлов и задач: Iceberg определяет, какие файлы необходимо прочитать, и формирует задачи чтения. Это позволяет вычислительным движкам избегать повторной обработки метаданных и эффективно распараллеливать чтение.
  • Проекции и time travel: через TableScan можно указать projection (какие столбцы вернуть) и time-travel параметры (asOfTime, useSnapshot) для чтения данных в конкретной временной точке. Time travel достигается за счёт использования Snapshot или asOfTime для конфигурации сканирования.
  • Чтение на уровне строк: в некоторых сценариях можно использовать IcebergGenerics.read(table) для построчного чтения, с построением ScanBuilder, where и select. Этот механизм полезен, когда требуется быстро прочитать маленькие подмножности данных или проводить прототипирование без полноценного выполнения на вычислительном движке.

Таким образом, механизм чтения Iceberg объединяет эффективное планирование файлов, минимизацию I/O и гибкость в выборе проекций. Это критично для интеграции Iceberg с Spark, Flink и собственными Java-приложениями, где внешний слой может формировать задачи подключения к данным без повторной реализации логики чтения метаданных Iceberg.

 

Чтение на уровне строк: IcebergGenerics, ScanBuilder, чтение строковых результатов

Когда требуется построчная обработка данных (row-level), Iceberg предоставляет генераторы записей и API чтения:

  • IcebergGenerics.read(table): создаёт ScanBuilder, который позволяет настроить условия where и select для выборки строк. Этот метод полезен для небольших наборов данных или для тестирования функциональности.
  • ScanBuilder: сборщик конфигурации построчного чтения, который возвращает объект, способный строить и выполнять чтение. Здесь можно задать where условия, выбрать необходимые поля и затем вызвать build().
  • Результат чтения: CloseableIterable или аналогичные структуры, возвращающие записи Iceberg в памяти JVM. Это удобно для миграционных сценариев, тестирования или интеграций, где данные нужно просто обработать в виде объектов.

Следует помнить, что для крупных наборов данных использование IcebergGenerics чаще дополняется внешними вычислительными движками (Spark, Flink), которые предоставляют более богатые механизмы планирования и дифференцированного выполнения над большими данными. Тем не менее, функционал IcebergGenerics остаётся важной частью инструментального набора для задач ад-хок чтения и прототипирования.

 

Операции над данными и транзакции: AppendFiles, OverwriteFiles, DeleteFile, Rewrite, Transaction и commit

Iceberg поддерживает богатый набор операций над данными и связанными файлами через транзакционную модель:

  • AppendFiles: добавление новых data-файлов в таблицу в рамках транзакции. Добавление файлов должно происходить в контексте транзакции, чтобы обеспечить атомарность.
  • OverwriteFiles: замена существующих файлов новыми версиями, которые соответствуют заданному условию (фильтр по данным, например по строкам). Это позволяет обновлять данные без полного переписывания файлов.
  • DeleteFile: удаление файла данных как часть операции над таблицей, может применяться в контексте Row-Level Delete или других сценариев.
  • Rewrite: перепаковка файлов и замена старых файлов новыми версиями, включая уплотнение и оптимизацию набора данных.
  • Transaction: контейнер для нескольких операций над таблицей, которые фиксируются и коммитятся атомарно. Пример: внутри транзакции выполняются операции newAppend, newOverwrite и другие; затем вызывается commitTransaction, чтобы зафиксировать весь набор изменений как единое целое.
  • Коммиты: commit, commitTransaction и commit для отдельных операций фиксируют изменения и обеспечивают консистентность. В рамках транзакций Iceberg способен выполнить несколько операций и зафиксировать их все вместе, избегая частичных обновлений.

Эта модель транзакций обеспечивает атомарность, консистентность и целостность изменений, что особенно важно в средах с высокой конкуренцией на запись, параллельной обработкой и при интеграции с внешними системами вычислений.

 

Управление версиями и ветками: ManageSnapshots, создание веток и тегов, замена веток, ретеншн-политики

Управление версиями и датированными состояниями таблиц реализуется через набор операций:

  • ManageSnapshots: набор операций для создания веток (branch) и тегов (tag), а также для изменения минимального количества сохраняемых снимков и максимального возраста снимков. Эти политики ретенции позволяют балансировать между сохранением истории и экономией места.
  • Создание веток и тегов: позволяет зафиксировать конкретные состояния таблицы и обращать к ним через useRef. Ветки и теги позволяют организовать параллельные потоки разработки, экспериментальные изменения и аудиотрек.
  • Замена веток: операция replaceBranch позволяет перенаправить головной снимок ветки на новый снимок, сохраняя при этом ретенцию по умолчанию. Это эквивалентно перетягиванию головы ветки к новому состоянию.
  • Ретеншн-политики: через setMaxRefAgeMs, setMinSnapshotsToKeep и другие параметры можно контролировать, как долго хранить снимки и какие из них сохранять в рамках ветки/тега. Это критически важно для соблюдения политики хранения данных и эффективного использования пространства.
  • Удаление веток и тегов: removeBranch и removeTag позволяют убрать устаревшие ветки и теги из каталога, сохраняя чистоту истории.

Эти механизмы дают возможность управлять жизненным циклом версий и историей данных, что крайне полезно для аудита, исследования изменений и регуляторного соответствия.

 

Метаданные как таблицы: SnapshotsTable, HistoryTable, DataFilesTable, ManifestsTable

Iceberg предоставляет специальные таблицы для работы с внутренними метаданными как с обычными данными:

  • SnapshotsTable: позволяет обращаться к снимкам таблицы как к обычной таблице и выполнять запросы на уровне метаданных.
  • HistoryTable: даёт доступ к истории изменений и состоянию таблицы во времени.
  • DataFilesTable: отображает список файлов данных, участвующих в текущем или историческом контексте.
  • ManifestsTable: предоставляет представление манифестов, связанных с данными файлами и их планированием.

Эти «таблицы метаданных» служат инструментами аудита, мониторинга и диагностики состояния Iceberg. Они позволяют аналитикам и администраторам получать представление о текущем и прошлых состояниях таблиц без необходимости отдельно извлекать и декодировать метаданные.

 

Фильтрация и оптимизация: Expressions, predicate pushdown, фильтры и статистика, Metrics и MetricsModes

Эффективность запроса во многом определяется умением Iceberg применять фильтры и статистику к данным:

  • Expressions: фабричные методы для построения предикатов (unbound expressions), которые впоследствии привязываются к конкретному типу данных. Привязанные выражения допускают адаптацию литералов к типам поля и обеспечивают корректное сравнение значений.
  • Predicate pushdown: Iceberg может перенести часть фильтрации на уровень чтения файлов, что позволяет пропускать чтение файлов, не пригодных под условия запроса.
  • Фильтры и статистика: статистика по столбцам (field metrics) используется для ускорения сканирования. Это позволяет движку исключать файлы без нужных данных до фактического чтения.
  • Metrics и MetricsModes: сбор статистики по столбцам и управление режимами метрик, влияют на планирование и выбор файлов. Метрики помогают поддерживать эффективный план сканирования и ранжировать файлы по вероятности попадания в результирующий набор.

Эти механизмы обеспечивают проактивную оптимизацию сканирования и позволяют построить производительный путь обработки данных в связке с системами вроде Spark, Flink и собственными движками.

 

Архитектура плагинов Trino: SPI, ServiceLoader, Plugin и контекст загрузки

Trino применяет плагинную архитектуру для расширения возможностей и интеграции с различными источниками данных и системами. Основные элементы:

  • SPI (Service Provider Interface): набор интерфейсов, которые плагины реализуют для предоставления конкретных функций - коннекторов, типов, функций и механизмов управления безопасностью.
  • ServiceLoader: механизм загрузки плагинов в контексте Trino. Он позволяет динамически загружать реализации, работать с изоляцией класслоудеров и совместимыми версиями.
  • Plugin: базовый элемент плагина, который реализует методы доступа к коннекторам, типам и другим сервисам. В Spring/Java-подходе плагин имеет точку входа, через которую Trino создаёт коннектор.
  • Контекст загрузки: загрузчик классов в Trino создаёт изолированные контексты для плагинов, чтобы избежать конфликтов зависимостей между плагинами и самим движком.

Эта архитектура позволяет гибко расширять стек, реализовывать коннекторы к новым источникам данных или каталогам Iceberg и поддерживать совместимость между релизами.

 

Разработка плагина Trino: структура проекта, точки входа, конфигурация Maven/Gradle, зависимости

Разработка плагина Iceberg для Trino включает создание коннектора и реализации SPI:

  • Структура проекта: модуль плагина включает реализацию коннектора Iceberg, зависимостей от Iceberg API и интеграции с Trino SPI.
  • Точки входа: каждый плагин реализует интерфейс Plugin и регистрирует фабрики коннекторов через методы, например, getConnectorFactories(). Реализация должна корректно обрабатывать конфигурацию кластера и совместимость версий.
  • Зависимости: плагин в большинстве случаев использует зависимость типа provided для доступа к API Trino SPI, чтобы предоставить независимые от Trino версии и обеспечить совместимость.
  • Конфигурация: через POM (Maven) или Gradle-проект задаются зависимости, версии и параметры сборки. В контексте совместимости часто рекомендуется фиксировать версию SPI и поддерживать тесты на određённой версии Trino.
  • Тестирование: тесты должны охватывать сценарии использования icebergs, включая чтение, запись, Time Travel и транзакции, чтобы гарантировать корректную работу в рамках вашей версии Trino.

Разработка требует внимательности к сложному взаимодействию между Iceberg API, каталога и вычислительным движком. Важной частью является тестирование совместимости и обеспечение корректности загрузки плагинов в разных версиях Trino.

 

Совместимость и развертывание плагинов: совместимость SPI, версия Trino, окружение classloader

Совместимость плагинов с версиями Trino - критический вопрос:

  • Совместимость SPI: плагины должны явно зависеть от конкретной версии trino-spi и соответствовать контрактам той версии.
  • Версия Trino: плагин, собранный для версии 470, может не работать с 430 или 490, поэтому рекомендуется синхронизировать версии сборки и разворачивания.
  • Окружение classloader: плагины загружаются в отдельном загрузчике классов (classloader isolation). Это обеспечивает изоляцию и позволяет использовать разные версии библиотек внутри плагинов, но требует осторожности в настройке зависимостей.
  • Тестирование совместимости: рекомендуется тестировать плагин на целевой версии кластера с использованием реальных параметров конфигураций и окружения. В случае необходимости можно указать зависимости через property-файлы и версионирование, чтобы ускорить внедрение.
  • Управление зависимостями: плагины Heidi должны использовать зависимости как provided для SPI, чтобы избежать дублирующих копий классов внутри сборки и конфликтов зависимостей.

Таким образом, поддержка совместимости - это ключ к устойчивому внедрению плагинов в производственные системы.

 

Каталоги и расширяемость: HiveCatalog, HadoopCatalog и возможность реализации пользовательских Catalogs

Расширяемость Iceberg через каталоги позволяет адаптировать систему под существующую инфраструктуру:

  • HiveCatalog и Hive Metastore: интеграция с Hive Metastore для управления метаданными Iceberg. HiveCatalog обеспечивает совместимость с существующим стеком и упрощает миграцию на Iceberg.
  • HadoopCatalog: работа на уровне файловой системы без внешнего хранилища метаданных. Требует атомарности файловых операций на уровне файловой системы.
  • Пользовательские Catalogs: возможность реализовать собственный каталог, адаптирующий Iceberg под внутренние процессы предприятия, такие как корпоративные сервисы метаданных, собственные требования к безопасности и аудиту.
  • Динамическая загрузка Catalog: в Spark и Flink каталоги можно загружать через конфигурацию catalog-impl, чтобы избежать конфликтов зависимостей и обеспечить гибкость развёртывания.
  • В MR (MapReduce) окружении Gateways: иногда требуется реализовать CatalogLoader и указать свойства iceberg.mr.catalog.loader.class для загрузки каталога.

Расширяемость каталогов является одной из сильных сторон Iceberg, поскольку позволяет адаптировать технологический стек к реальным задачам организации без жесткой привязки к конкретному поставщику.

 

Реализация пользовательских компонентов: CustomTableOperations, CustomCatalog, CustomFileIO, CustomLocationProvider

Iceberg допускает реализацию собственных компонентов для настройки архитектуры под уникальные требования:

  • CustomTableOperations: расширение базовых операций таблицы для реализации специфических методов чтения/записи метаданных, в частности методов doRefresh, doCommit и io. В примере показано, как можно подключить внешний сервис для определения местоположения метаданных и атомарного обновления их.
  • CustomCatalog: реализация собственного Catalog, включая создание новых TableOperations и определение defaultWarehouseLocation. Это позволяет использовать свой путь хранения и интегрировать внешние сервисы управления метаданными.
  • CustomFileIO: реализация FileIO и связанных классов InputFile/OutputFile для чтения и записи файлов метаданных Iceberg. Это даёт возможность адаптировать доступ к файловой системе и поддержать специфические требования по безопасности и аудитам.
  • CustomLocationProvider: реализация собственного LocationProvider, чтобы определять пути к файлам данных с использованием собственной логики формирования путей и учёта партиций.
  • Расширение IcebergSource: для интеграции в собственные источники данных, например, в рамках кастомного коннектора, чтение таблицы может происходить через CustomCatalog и CustomTableOperations.

Эти примеры демонстрируют, как гибко можно внедрять Iceberg в инфраструктуру и как создавать собственные расширения для удовлетворения специфических требований к хранению и обработке данных.

 

Интеграция стеков и конфигурации: Spark/Hive Catalogs, SparkCatalog, конфигурации Iceberg с ведущими движками

Интеграция Iceberg с вычислительными движками - одна из ключевых особеник:

  • SparkCatalog и Spark интеграции: Iceberg поддерживает интеграцию с Spark через SparkCatalog и соответствующие модули iceberg-spark. Это обеспечивает DataSource V2 для Spark и позволяет использовать Iceberg как хранилище данных в Spark-проектах.
  • HiveCatalog как мост к Hive: Spark может подключаться к Iceberg через HiveCatalog, используя HiveMetastore в качестве хранилища метаданных. Это обеспечивает совместимость с уже существующим аналитическим стеком.
  • Flink, MapReduce и другие движки: Iceberg имеет модули iceberg-flink и iceberg-mr, которые обеспечивают интеграцию с Flink и MapReduce/Hive. Взаимодействие через соответствующие API позволяет выполнять анализ и обработку в рамках выбранного вычислительного движка.
  • Конфигурации Iceberg: Iceberg поддерживает конфигурации, которые описывают каталог, файловую систему, форматы файлов, сетевые параметры и пр. Совместимость и правильная настройка конфигураций важны для гарантии корректной маршрутизации запросов и надёжности операций.
  • Согласованность между стеком: важно обеспечить согласованность версий Iceberg API, каталога и исполнительного движка. Пример - использование совместимой версии Iceberg, чтобы обеспечить корректную интероперабельность.

Интеграционные сценарии требуют тщательной конфигурации и тестирования, но они обеспечивают мощный арсенал методов взаимодействия между Iceberg, каталогами и вычислительными движками.

 

Реальные кейсы применения: создание таблиц, схем и partition specs, чтение и обновление данных, time travel

В реальных проектах Iceberg применяется для множества задач:

  • Создание таблиц и схем: через Catalog создаются таблицы, определяется схема и PartitionSpec. Новые поля добавляются через updateSchema, новые политики партиционирования - через updateSpec.
  • Определение partition specs: пример** - разделение по часовым интервалам event_time и уровню логов, что позволяет эффективно индексировать данные и ускорить запросы.
  • Чтение и обновление данных: с помощью TableScan формируется план чтения, затем данные читаются через движок вычислений. Обновления осуществляются через AppendFiles, OverwriteFiles и транзакции.
  • Time travel: через asOfTime/useSnapshot можно возвращаться к предыдущим состояниям таблицы, что полезно для аудита, анализа ошибок и регрессионного тестирования.
  • Работа с ветками и тегами: создание веток и тегов для изоляции изменений, фиксация на конкретных снимках, последующая замена и ретеншн-политики.
  • Примеры интеграций: Iceberg часто применяется в связке с Spark для аналитических запросов, а также в Standalone Java-приложениях через Iceberg Java API. Он подходит для организации архивов и «мгновенного» доступа к данным в аналитических сценариях.

Эти кейсы демонстрируют практические сценарии использования Iceberg и показывают преимущества в гибкости, аудите и управлении версиями по сравнению с традиционными подходами, где партиционирование, схемы и метаданные часто управляются разрозненно.

 

Риск-аналитика и ограничения: зависимости, тестирование совместимости, метрики эффективности

Реализация Iceberg в крупных кластерах сопряжена с рядом рисков и ограничений:

  • Зависимости и совместимость: обновления Iceberg, каталога и движка вычислений должны быть совместимы. Проблемы совместимости могут привести к неверной интерпретации метаданных и конфликтам версий.
  • Тестирование совместимости: необходимы тесты на время реакции миграций схем, обновлений partition specs и поведения в разных режимах времени. Тестирование должно включать сценарии времени путешествий, транзакций и ретеншена.
  • Метрики эффективности: внедрение предикатного пушдауна, фильтров и статистики требует мониторинга и балансирования между CPU и I/O. Неправильная конфигурация может привести к ухудшению производительности.
  • Риск данных и аудита: неправильное использование времени путешествий и ветвей может повлиять на консистентность, если не соблюдать политики ретенции и не обеспечивать аудит изменений.
  • Хранение метаданных: полисы ретенции и хранение снимков занимают место. В больших системах полезно адаптировать эти политики и планировать аудит на соответствие требованиям законов и регламентов.
  • Совместная работа с несколькими каталогами: когда таблица доступна через несколько каталогов, важно обеспечить единообразие идентификаторов и согласованность доступа к данным.
  • Экзотические форматы и расширяемость: поддержка нестандартных форматов и пользовательских компонентов требует внимания к качеству кода и совместимости с общими контрактами Iceberg.

Понимание рисков и регулярное тестирование позволяют минимизировать потенциальные проблемы и поддерживать устойчивость архитектуры.

 

Конкурентный анализ и дифференциация: Iceberg против Delta Lake и Apache Hudi, уникальные преимущества Iceberg

На рынке проекта Iceberg конкурирует с Delta Lake (Databricks) и Apache Hudi. Различия и уникальные преимущества:

  • Архитектура метаданных: Iceberg выделяет метаданные в отдельные сущности и поддерживает независимую версию таблицы. Delta Lake и Hudi тоже обеспечивают транзакции и версионирование, но Iceberg часто предлагает более чистый и расширяемый набор абстракций для метаданных.
  • Скрытое партиционирование и time travel: Iceberg акцентирует внимание на скрытом партиционировании и мощной истории метаданных, что облегчает изменение схем и партиционирования без миграций и без нарушения совместимости запросов.
  • Каталоги и расширяемость: Iceberg поддерживает множество каталогов (HiveCatalog, Glue, Nessie, REST, HadoopCatalog) и позволяет реализовать пользовательские Catalogs. Delta Lake и Hudi также поддерживают несколько каталогов, но Iceberg предлагает богатую экосистему плагинов и расширяемость каталога.
  • Интеграция с вычислителями: Iceberg хорошо интегрируется с Trino (через Iceberg Connector), Spark и Flink, а также поддерживает независимый доступ к данным через Java API. Delta Lake и Hudi также имеют поддержку в Spark и некоторых движках, но Iceberg выделяется гибкостью и независимостью от отдельных движков.
  • Транзакции и консистентность: Iceberg реализует транзакционность на уровне памяти и файлов, обеспечивая атомарность операций и консистентность метаданных; Delta Lake и Hudi обладают собственными подходами к транзакциям и обновлениям, каждый со своими особенностями и ограничениями.
  • Эволюция схем и миграции: Iceberg делает акцент на безопасной эволюции схем и партиционирования, что важно для больших массивов данных и долгосрочных развёртываний.

Выбор между Iceberg, Delta Lake и Apache Hudi зависит от контекста: имеющихся инструментов, инфраструктуры, требований к аудиту, скорости миграции схем и стратегии хранения. Iceberg предлагает гибкость каталога, богатую поддержку механизмов time travel и эволюции схем, что может быть критично для организаций с долгосрочным хранением и потребностью в аудите и регуляторном учёте.

В итоге, концептуальный обзор Iceberg в контексте Trino охватывает не только технические детали, но и стратегическое значение архитектурного выбора: разделение метаданных, поддержка множества каталогов, транзакционная целостность и способность эволюционно развивать схему и партиционирование. Это делает Iceberg привлекательным фреймворком для корпоративной цифровой трансформации и интеграций с ведущими движками анализа данных.

В конце статьи приведены практические выводы: Iceberg обеспечивает единое и согласованное управление версиями и схемами, поддерживает гибкое расширение каталога и эффективное чтение через TableScan. В связке с Trino и соответствующими адаптерами Catalogs это создаёт устойчивую основу для аналитики, архивации и обработки больших данных в условиях корпоративной инфраструктуры.

 

Вопрос-Ответ:

  • Вопрос: Что обеспечивает Time Travel в Iceberg и зачем он нужен?
    Ответ: Time Travel позволяет обращаться к данным в конкретном снимке таблицы или по времени, что обеспечивает аудит, откат ошибок и повторное воспроизведение аналитических результатов без восстановления физически устаревших файлов.

  • Вопрос: Чем отличается скрытое партиционирование Iceberg от явного Hive-партиционирования?
    Ответ: В Iceberg партиционирование рассчитывается автоматически на уровне системы и не требует явного указания в запросах, что снижает риск ошибок и упрощает миграцию схем. Hive-партиционирование требует явного указания значений и может приводить к усложнённой поддержке схем.

  • Вопрос: Какие каталоги Iceberg считаются базовыми и какие задачи они решают?
    Ответ: HiveCatalog, HadoopCatalog, Glue, Nessie и REST - каждый каталог осуществляет хранение и поиск метаданных таблиц в рамках своей инфраструктуры, обеспечивая гибкость in- и out-of-cluster. Пользовательские каталоги позволяют адаптировать Iceberg под специфические требования предприятия.

  • Вопрос: Какой смысл в разделении метаданных и данных?
    Ответ: Разделение метаданных и данных позволяет централизовать контроль версий, упрощает время путешествий и реконструкцию состояний таблиц, улучшает планирование запросов и позволяет более гибко управлять хранилищем файлов и метаданными.

  • Вопрос: Какие преимущества приносит архитектура плагинов Trino для Iceberg?
    Ответ: Архитектура плагинов обеспечивает изоляцию зависимостей, гибкость загрузки коннекторов, возможность использования разных версий SPI и адаптацию к различным каталогам Iceberg без изменения основного ядра Trino.

  • Вопрос: Что следует учитывать при реализации пользовательских Catalogs и FileIO?
    Ответ: Необходимо обеспечить корректную интеграцию с системами хранения, атомарные обновления метаданных, корректную обработку путей к данным, совместимость с Iceberg API и надёжную загрузку через SPI. Тестирование на совместимость и безопасность критически важно.

  • Вопрос: Как Iceberg поддерживает миграцию схем без разрушения запросов?
    Ответ: Iceberg позволяет эволюцию схем и partition specs за счёт обновления схемы и партиционирования с сохранением совместимости, а также управляет идентификаторами полей и миграциями метаданных через Snapshot и History, что обеспечивает прозрачность изменений и безопасную миграцию.

  • Вопрос: В чём основное преимущество Iceberg по сравнению с Delta Lake и Apache Hudi в контексте корпоративной архитектуры?
    Ответ: Iceberg выделяется гибкой архитектурой каталога, расширяемостью, поддержкой множества форматов и скрытым партиционированием, которое упрощает миграции схем и обеспечивает эффективное Time Travel. Это даёт больше гибкости в интеграции с разными движками и каталогами.

Примечание: Приведённые вопросы и ответы отражают ключевые аспекты обсуждаемой темы и призваны подытожить концептуальные выводы статьи, служа кратким ориентиром для архитекторов, аналитиков и ИТ-директоров, планирующих внедрение Iceberg в корпоративной среде.

← Предыдущая статья
Jupyter Notebook в средах WSL и Docker: архитектура, развёртывание и управление инфраструктурой
Следующая статья →
StarRocks для аналитики больших данных в реальном времени
Запросить видео презентацию Запросить доступ к демо стенду online Узнать стоимость лицензий

Задать вопрос

loading...

Решения

Анализировать ФинансыУвеличивайте ПродажиОптимальный Склад и ЛогистикаМаркетинговые Метрики

Клиенты
  • ПАО «Ростелеком» — российский провайдер цифровых услуг и сервисов. Предоставляет услуги широкополосного доступа в Интернет, интерактивного телевидения, сотовой связи, местной и дальней телефонной связи и др. Занимает лидирующие позиции на российском рынке высокоскоростного доступа в интернет, платного ТВ, хранения и обработки данных, а также кибербезопасности

  • ГК «Агропромкомплектация-Курск» - одна из ведущих в Российской Федерации агропромышленных компаний с полным производственным циклом "от поля до прилавка". За 32 года работы на рынке компания заслуженно завоевала репутацию одного из лидеров страны в производстве свинины и молока.

  • ЭГИС - международная фармацевтическая компания, основанная в 1907 году в Венгрии. Компания имеет представительства более чем в 60 странах мира, в том числе в России. Компания ЭГИС является одним из ведущих производителей дженерических лекарственных средств в Центральной и Восточной Европе. Её деятельность охватывает все звенья производственно-сбытовой фармацевтической цепочки.

  • AbbVie – компания, которая стремится решить самые серьезные проблемы здравоохранения. Это биофармацевтическая компания, сфокусированная на исследованиях и разработках.

  • Решения
    • Дистрибуция
    • Розничная торговля
    • Производство
    • Операторы связи
    • Страхование
    • Банки
    • Лизинг
    • Логистика
    • Нефтегазовый сектор
    • Медицина
    • Сеть ресторанов
    • E-Commerce
    • Энергетика
    • Фармацевтика
  • Услуги
    • Переход на отечественные BI и DWH
    • Консалтинг
    • Пилотный проект
    • Обучение и сертификация
    • Бесплатное обучение
    • Техническая поддержка
    • Технические задания
    • Сбор требований для проекта внедрения BI-системы
    • CI/CD для DWH
    • Аудит BI приложений
    • Выделенная команда
    • Настойка и поддержка баз данных
    • Разработка BI Стратегии
    • Styleguide для BI-системы
    • Как выбрать BI-систему
  • Платформы
    • FineBI
    • FineReport
    • FineDataLink
    • Коннекторы данных из 1С в BI
    • Airflow + NiFi
    • Visiology
    • Luxms BI
    • Modus BI
    • PIX BI
    • Arenadata
    • ClickHouse
    • Greenplum
    • Postgres Professional
    • Open-source BI: Superset/Metabase
    • Loginom
    • Yandex.DataLens
    • AI / Исскуственный интеллект
    • Optimacros
    • Шины данных
  • Курсы
    • Учебный курс Информационная грамотность
    • Учебный курс для бизнес-аналитиков
    • Учебный курс для системных аналитиков
    • Учебный курс по Data Governance
    • Учебный курс Как стать CDO
    • Учебный курс Современная архитектура хранилища данных
    • Учебный курс по Fine BI
    • Учебный курс по FineReport
    • Учебный курс по DWH
    • Учебный курс по Data Science (ML, AI)
    • Учебный курс по PostgreSQL
    • Учебный курс по Apache Airflow и NiFi
    • Учебный курс по Open-source BI
    • Учебный курс по ClickHouse
    • Учебный курс по DataLens
    • Учебный курс по Loginom
    • Учебный курс по Modus BI и ETL
    • Учебный курс по Visiology
    • Учебный курс по dbt
  • Функциональные решения
    • Создание Data Lake
    • Цифровая трансформация
    • Управление по KPI
    • Финансы
    • Продажи
    • Склад
    • HR
    • Маркетинг
    • Внутренний аудит
    • Категорийный менеджмент
    • S&OP и прогнозная аналитика
    • Геоаналитика
    • Цепочки поставок (SCM)
    • AutoML
    • Process Mining
    • Сквозная аналитика
  • Компания
    • О нас
    • Руководство
    • Новости
    • Клиенты
    • Скачать
    • Контакты
    • Политика конфиденциальности
RutubeVkontakteLinkedInYouTube
ООО "Би Ай Консалт",
ИНН: 7811437757,
ОГРН: 1097847154184
199178, Россия,
Санкт-Петербург,
6-ая линия В.О., Д. 63, 4 этаж
Тел: +7 (812) 334-08-01
Тел: +7 (499) 608-13-06
E-mail: info@biconsult.ru

 

 

 

 

 

×

Пользуясь сайтом, вы соглашаетесь с использованием cookies и политикой конфиденциальности.