Каталоги Iceberg: Руководство для инженеров по обработке данных
Изучите различные варианты, доступные для каталогов Iceberg как в решениях с открытым исходным кодом, так и в коммерческих решениях, и используйте рекомендации с учетом конкретных ситуаций.
В мире хранилищ данных Apache Iceberg стал популярным инструментом для гибкого и масштабируемого управления большими наборами данных. Каталоги занимают центральное место в функциональности Iceberg, которая жизненно важна для организации таблиц, обеспечения согласованности и управления метаданными. В этой статье мы рассмотрим, что такое каталоги Iceberg, их различные реализации, варианты использования и конфигурации, а также рассмотрим наиболее подходящие решения для каталогов в различных случаях использования.
Что такое каталог Iceberg?
В Iceberg каталог отвечает за управление путями к таблицам, указывая на текущие файлы метаданных, которые представляют состояние таблицы. Эта архитектура важна, поскольку она обеспечивает атомарность, согласованность и эффективность запросов, гарантируя, что все считывающие и записывающие устройства получают доступ к одному и тому же состоянию таблицы. Различные реализации каталогов хранят эти метаданные различными способами, от файловых систем до специализированных служб хранения данных.
Основные функции каталога Iceberg
Основными функциями каталога Iceberg являются:
- Отображение путей к таблицам: Привязка пути к таблице (например, “db.table”) к соответствующему файлу метаданных.
- Поддержка атомарных операций: обеспечение согласованности состояния таблицы при одновременном чтении/записи.
- Управление метаданными: Хранение и управление метаданными, обеспечение доступности и согласованности.
Каталоги Iceberg предлагают различные реализации для удовлетворения различных системных архитектур и требований к хранилищу. Давайте рассмотрим эти реализации и их пригодность для различных сред.
Типы каталогов Iceberg
1. Каталог Hadoop
Каталог Hadoop, как правило, самый простой в настройке, для него требуется только файловая система. Этот каталог управляет метаданными путем поиска самого последнего файла метаданных в каталоге таблицы на основе временных меток файлов. Однако из-за своей зависимости от атомарных операций на уровне файлов (чего нет в некоторых системах хранения, таких как S3), каталог Hadoop может не подходить для производственных сред, где распространены параллельные операции записи.
Пример конфигурации
Как настроить каталог Hadoop с помощью Apache Spark:
spark-sql --packages org.apache.iceberg:iceberg-spark-runtime-3.3_2.12:0.14.0 \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \ --conf spark.sql.catalog.my_catalog=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.my_catalog.type=hadoop \ --conf spark.sql.catalog.my_catalog.warehouse=file:///D:/sparksetup/iceberg/spark_warehouse
другой способ задать каталог в самом задании spark:
SparkConf sparkConf = new SparkConf()
.setAppName("Example Spark App")
.setMaster("local[*]")
.set("spark.sql.extensions","org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions")
.set("spark.sql.catalog.local","org.apache.iceberg.spark.SparkCatalog")
.set("spark.sql.catalog.local.type","hadoop")
.set("spark.sql.catalog.local.warehouse", "file:///D:/sparksetup/iceberg/spark_warehouse")
В приведенном выше примере мы присвоили каталогу имя “local”, как это было настроено в spark “spark.sql.catalog.локальный". Это может быть выбор вашего имени.
Плюсы:
- Простая настройка, не требуется внешнее хранилище данных.
- Идеально подходит для сред разработки и тестирования.
Минусы
- Ограничено отдельными файловыми системами (например, одним пакетом S3).
- Не рекомендуется для использования в рабочей среде
2. Каталог Hive
Каталог Hive использует хранилище метаданных Hive metastore для управления расположением метаданных, что делает его совместимым с многочисленными инструментами обработки больших данных. Этот каталог широко используется в производственных целях благодаря его интеграции с существующей инфраструктурой на базе Hive и совместимости с несколькими механизмами обработки запросов.
Пример конфигурации
Как использовать каталог Hive в Spark:
spark-sql --packages org.apache.iceberg:iceberg-spark-runtime-3.3_2.12:0.14.0 \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \ --conf spark.sql.catalog.my_catalog=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.my_catalog.type=hive \ --conf spark.sql.catalog.my_catalog.uri=thrift://<metastore-host>:<port>
Плюсы:
- Высокая совместимость с существующими инструментами обработки больших данных.
- Не зависит от облака и гибко настраивается как локально, так и в облаке.
Минусы:
- Требуется поддержка хранилища данных Hive, что может усложнить работу.
- Отсутствует поддержка транзакций с несколькими таблицами, что ограничивает атомарность операций между таблицами
3. Каталог AWS Glue
AWS Glue Catalog - это каталог управляемых метаданных, предоставляемый AWS, что делает его идеальным для организаций, активно инвестирующих в экосистему AWS. Он обрабатывает метаданные таблицы Iceberg как свойства таблиц в AWS Glue, обеспечивая плавную интеграцию с другими сервисами AWS.
Пример конфигурации
spark-sql --packages org.apache.iceberg:iceberg-spark-runtime-x.x_x.xx:x.x.x,software.amazon.awssdk:bundle:x.xx.xxx \ --conf spark.sql.catalog.my_catalog=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.my_catalog.catalog-impl=org.apache.iceberg.aws.glue.GlueCatalog \ --conf spark.sql.catalog.my_catalog.io-impl=org.apache.iceberg.aws.s3.S3FileIO \ --conf spark.hadoop.fs.s3a.access.key=$AWS_ACCESS_KEY \ --conf spark.hadoop.fs.s3a.secret.key=$AWS_SECRET_ACCESS_KEY
Плюсы:
- Управляемый сервис, снижающий затраты на инфраструктуру и техническое обслуживание.
- Сильная интеграция с сервисами AWS.
Минусы:
- Специфичен для AWS, что ограничивает гибкость взаимодействия между облаками.
- Нет поддержки транзакций с несколькими таблицами
4. Каталог Project Nessie
Project Nessie предлагает подход “данные как код”, позволяющий управлять версиями данных. Благодаря своим возможностям ветвления и тегирования, подобным Git, Nessie позволяет пользователям управлять ветвлениями данных аналогично исходному коду. Это обеспечивает надежную основу для транзакций с несколькими таблицами и несколькими операторами.
Пример конфигурации
spark-sql --packages "org.apache.iceberg:iceberg-spark-runtime-x.x_x.xx:x.x.x" \ --conf spark.sql.catalog.my_catalog=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.my_catalog.catalog-impl=org.apache.iceberg.nessie.NessieCatalog \ --conf spark.sql.catalog.my_catalog.uri=http://<host>:<port>
Плюсы:
- Предоставляет функциональные возможности “данные в виде кода” с контролем версий.
- Поддерживает транзакции с несколькими таблицами.
Минусы:
- Требуется самостоятельный хостинг, что усложняет инфраструктуру.
- Поддержка инструментов ограничена по сравнению с Hive или AWS Glue
5. Каталог JDBC
Каталог JDBC позволяет хранить метаданные в любой базе данных, совместимой с JDBC, такой как PostgreSQL или MySQL. Этот каталог не зависит от облака и обеспечивает высокую доступность благодаря использованию надежных систем СУБД.
Пример конфигурации
spark-sql --packages org.apache.iceberg:iceberg-spark-runtime-x.x_x.xx:x.x.x \ --conf spark.sql.catalog.my_catalog=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.my_catalog.catalog-impl=org.apache.iceberg.jdbc.JdbcCatalog \ --conf spark.sql.catalog.my_catalog.uri=jdbc:<protocol>://<host>:<port>/<database> \ --conf spark.sql.catalog.my_catalog.jdbc.user=<username> \ --conf spark.sql.catalog.my_catalog.jdbc.password=<password>
Плюсы:
- Простая настройка с использованием существующей инфраструктуры СУБД.
- Высокая доступность и независимость от облака.
Минусы:
- Нет поддержки транзакций с несколькими таблицами.
- Увеличивает зависимость от драйверов JDBC для всех инструментов доступа
6. Каталог Snowflake
Snowflake обеспечивает надежную поддержку Apache Iceberg tables, позволяя пользователям использовать платформу Snowflake в качестве каталога Iceberg. Эта интеграция сочетает производительность Snowflake и семантику запросов с гибкостью формата открытых таблиц Iceberg, что позволяет эффективно управлять большими наборами данных, хранящимися во внешнем облачном хранилище. Обратитесь к документации snowflake для дальнейшей настройки по ссылке
Плюсы:
- Полная поддержка платформы: Обеспечивает всесторонний доступ для чтения и записи, а также такие функции, как транзакции ACID, эволюция схемы и перемещение во времени.
- Полная интеграция: Производительность Snowflake и возможности обработки запросов сочетаются с форматом открытых таблиц Iceberg, что облегчает эффективное управление данными.
- Упрощенное обслуживание: Snowflake выполняет задачи жизненного цикла, такие как уплотнение и сокращение операционных издержек.
Минусы:
- Ограничения, связанные с облаком и регионом: Внешний том должен быть подключен к тому же облачному провайдеру и в том же регионе, что и учетная запись Snowflake, что ограничивает возможности конфигурирования в разных облаках или регионах.
- Ограничение формата данных: Поддерживается только формат файла Apache Parquet, который может не соответствовать всем предпочтениям организации в отношении формата данных.
- Ограничения сторонних клиентов: Не позволяет сторонним клиентам изменять данные в таблицах Iceberg, управляемых Snowflake, что может повлиять на рабочие процессы, которые зависят от внешних инструментов.
7. Каталоги на основе Rest
Iceberg поддерживает каталоги на основе REST для решения ряда проблем, связанных с традиционными реализациями каталогов.
Проблемы, связанные с традиционными каталогами:
- Сложность на стороне клиента: Традиционные каталоги часто требуют конфигураций и зависимостей на стороне клиента для каждого языка (Java, Python, Rust, Go), что приводит к несогласованности между различными языками программирования и процессорами обработки. Подробнее об этом читайте здесь
- Ограничения масштабируемости: Управление метаданными и табличными операциями на клиентском уровне может создавать проблемы, влияющие на производительность и масштабируемость в крупномасштабных средах обработки данных.
Преимущества использования каталога REST:
- Упрощенная интеграция с клиентами: Клиенты могут взаимодействовать с каталогом REST, используя стандартные протоколы HTTP, что устраняет необходимость в сложных конфигурациях или зависимостях.
- Масштабируемость: Серверная архитектура каталога REST обеспечивает масштабируемое управление метаданными, адаптируя растущие наборы данных и схемы параллельного доступа.
- Гибкость: Организации могут внедрять пользовательскую логику каталога на стороне сервера, адаптируя каталог REST к конкретным требованиям без изменения клиентских приложений.
Появилось несколько реализаций каталога REST, каждая из которых отвечает конкретным потребностям организации:
- Gravitino - это сервис каталогов Iceberg REST с открытым исходным кодом, который облегчает интеграцию со Spark и другими системами обработки данных и предлагает простую настройку для управления таблицами Iceberg.
- Tabular - Управляемый сервис, предоставляющий интерфейс каталога REST, позволяющий организациям использовать возможности Iceberg без затрат на управление инфраструктурой каталога. Подробнее читайте в таблице
- Apache Polaris: Полнофункциональный каталог Apache Iceberg с открытым исходным кодом, реализующий REST API для обеспечения бесперебойной работы нескольких движков на таких платформах, как Apache Doris, Apache Flink, Apache Spark, StarRocks и Trino. ознакомьтесь с подробностями на GitHub.
Один из моих любимых и простых способов опробовать каталог Rest с таблицами Iceberg - это использовать простую реализацию Rest на Java. Пожалуйста, ознакомьтесь со ссылкой на GitHub здесь
Вывод
Выбор подходящего каталога Apache Iceberg имеет решающее значение для оптимизации вашей стратегии управления данными. Вот краткий обзор, который поможет вам принять решение:
- Каталог Hadoop: благодаря своей простоте лучше всего подходит для сред разработки и тестирования. Однако в производственных сценариях с одновременной записью могут возникнуть проблемы с согласованностью.
- Каталог Hive Metastore: Он идеально подходит для организаций с существующей инфраструктурой Hive. Он обеспечивает совместимость с широким спектром инструментов обработки больших данных и поддерживает сложные операции с данными. Однако поддержка службы Hive Metastore может усложнить работу.
- Каталог AWS Glue: Это оптимально для тех, кто активно инвестирует в экосистему AWS. Это обеспечивает бесперебойную интеграцию с сервисами AWS и снижает потребность в автономных службах метаданных. Однако это специфично для AWS, что может ограничивать гибкость взаимодействия между облаками.
- Каталог JDBC: Подходит для сред, предпочитающих реляционные базы данных для хранения метаданных, позволяя использовать любую базу данных, совместимую с JDBC. Это обеспечивает гибкость и использует существующую инфраструктуру СУБД, но может создавать дополнительные зависимости и требовать тщательного управления подключениями к базе данных.
- Каталог REST: Это идеальное решение для сценариев, требующих стандартизированного API для работы с каталогами, улучшающее взаимодействие между различными механизмами обработки и языками. Оно отделяет детали реализации каталога от клиентов, но требует настройки службы REST для обработки операций с каталогом, что может усложнить первоначальную настройку.
- Каталог Project Nessie: Он идеально подходит для организаций, которым требуется контроль версий своих данных, аналогичный Git. Он поддерживает ветвление, тегирование и транзакции с несколькими таблицами. Он предоставляет надежные возможности управления данными, но требует развертывания службы Nessie и управления ею, что может увеличить операционные издержки.
Понимание этих параметров каталога и их конфигураций позволит вам сделать осознанный выбор и оптимизировать настройку data lake или lakehouse в соответствии с конкретными потребностями вашей организации.




