Настройка Apache Iceberg™ в кластере Yandex Data Processing
Yandex Data Processing версии 2.0 и выше поддерживает использование таблиц Apache Iceberg™ совместно с движком Apache Spark™.
Подробную информацию об Apache Iceberg™ см. в разделе Apache Iceberg™ в Yandex Data Processing и в официальной документации
Примечание
Apache Iceberg™ не является частью сервиса Yandex Data Processing и не сопровождается командой разработки и службой поддержки Yandex Cloud, а его использование не входит в условия использования Yandex Data Processing
Настройте свойства компонентов для работы с Apache Iceberg™
-
Установите свойство
spark:spark.sql.extensions
в значениеorg.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions
. Это можно сделать как на уровне кластера, так и на уровне отдельного задания. -
Добавьте библиотеки Apache Iceberg™ в зависимости кластера или отдельного задания. Версии библиотек должны быть совместимы с версией Yandex Data Processing.
Образ 2.0.xОбразы 2.1.0–2.1.3Образы 2.1.4–2.1.xОбраз 2.2.xЧтобы добавить библиотеки требуемых версий, воспользуйтесь одним из способов:
-
Настройте доступ к репозиторию Maven
и установите свойствоspark:spark.jars.packages
в значениеorg.apache.iceberg:iceberg-spark-runtime-3.0_2.12:1.0.0
.Настроить доступ к Maven можно двумя способами:
- В группе безопасности кластера разрешите сетевой доступ к репозиторию Maven Central
. - Настройте альтернативный репозиторий Maven
и разрешите трафик к нему в группе безопасности кластера.
- В группе безопасности кластера разрешите сетевой доступ к репозиторию Maven Central
-
Скачайте файл библиотеки iceberg-spark-runtime-3.0_2.12-1.0.0.jar
и предоставьте доступ к нему одним из способов:-
Сохраните файл в бакет Yandex Object Storage и передайте URL файла в свойстве
spark:spark.jars
.URL файла имеет формат
s3a://<имя_бакета>/<путь_к_файлу>
.Этот бакет должен быть указан в настройках кластера. Сервисный аккаунт кластера должен иметь доступ на чтение из бакета.
-
Скопируйте файл на все узлы кластера вручную или с помощью скриптов инициализации и передайте полный путь к файлу в свойствах
spark:spark.driver.extraClassPath
иspark:spark.executor.extraClassPath
.
-
Чтобы добавить библиотеки требуемых версий, воспользуйтесь одним из способов:
-
Настройте доступ к репозиторию Maven
и установите свойствоspark:spark.jars.packages
в значениеorg.apache.iceberg:iceberg-spark-runtime-3.2_2.12-1.4.3
.Настроить доступ к Maven можно двумя способами:
- В группе безопасности кластера разрешите сетевой доступ к репозиторию Maven Central
. - Настройте альтернативный репозиторий Maven
и разрешите трафик к нему в группе безопасности кластера.
- В группе безопасности кластера разрешите сетевой доступ к репозиторию Maven Central
-
Скачайте файл библиотеки iceberg-spark-runtime-3.2_2.12-1.4.3.jar
и предоставьте доступ к нему одним из способов:-
Сохраните файл в бакет Yandex Object Storage и передайте URL файла в свойстве
spark:spark.jars
.URL файла имеет формат
s3a://<имя_бакета>/<путь_к_файлу>
.Этот бакет должен быть указан в настройках кластера. Сервисный аккаунт кластера должен иметь доступ на чтение из бакета.
-
Скопируйте файл на все узлы кластера вручную или с помощью скриптов инициализации и передайте полный путь к файлу в свойствах
spark:spark.driver.extraClassPath
иspark:spark.executor.extraClassPath
.
-
Чтобы добавить библиотеки требуемых версий, воспользуйтесь одним из способов:
-
Настройте доступ к репозиторию Maven
и установите свойствоspark:spark.jars.packages
в значениеorg.apache.iceberg:iceberg-spark-runtime-3.3_2.12:1.5.2
.Настроить доступ к Maven можно двумя способами:
- В группе безопасности кластера разрешите сетевой доступ к репозиторию Maven Central
. - Настройте альтернативный репозиторий Maven
и разрешите трафик к нему в группе безопасности кластера.
- В группе безопасности кластера разрешите сетевой доступ к репозиторию Maven Central
-
Скачайте файл библиотеки iceberg-spark-runtime-3.3_2.12-1.5.2.jar
и предоставьте доступ к нему одним из способов:-
Сохраните файл в бакет Yandex Object Storage и передайте URL файла в свойстве
spark:spark.jars
.URL файла имеет формат
s3a://<имя_бакета>/<путь_к_файлу>
.Этот бакет должен быть указан в настройках кластера. Сервисный аккаунт кластера должен иметь доступ на чтение из бакета.
-
Скопируйте файл на все узлы кластера вручную или с помощью скриптов инициализации и передайте полный путь к файлу в свойствах
spark:spark.driver.extraClassPath
иspark:spark.executor.extraClassPath
.
-
Чтобы добавить библиотеки требуемых версий, воспользуйтесь одним из способов:
-
Настройте доступ к репозиторию Maven
и установите свойствоspark:spark.jars.packages
в значениеorg.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.5.2
.Настроить доступ к Maven можно двумя способами:
- В группе безопасности кластера разрешите сетевой доступ к репозиторию Maven Central
. - Настройте альтернативный репозиторий Maven
и разрешите трафик к нему в группе безопасности кластера.
- В группе безопасности кластера разрешите сетевой доступ к репозиторию Maven Central
-
Скачайте файл библиотеки iceberg-spark-runtime-3.5_2.12-1.5.2.jar
и предоставьте доступ к нему одним из способов:-
Сохраните файл в бакет Yandex Object Storage и передайте URL файла в свойстве
spark:spark.jars
.URL файла имеет формат
s3a://<имя_бакета>/<путь_к_файлу>
.Этот бакет должен быть указан в настройках кластера. Сервисный аккаунт кластера должен иметь доступ на чтение из бакета.
-
Скопируйте файл на все узлы кластера вручную или с помощью скриптов инициализации и передайте полный путь к файлу в свойствах
spark:spark.driver.extraClassPath
иspark:spark.executor.extraClassPath
.
-
-
Теперь вы можете использовать Apache Iceberg™ в кластере Yandex Data Processing.
Пример использования Apache Iceberg™
Пример проверялся в кластере Yandex Data Processing версии 2.0, в котором:
- Установлены компоненты Spark и Hadoop.
- Подключен бакет Object Storage, и сервисный аккаунт кластера имеет права на чтение и запись в этом бакете.
- Настроен доступ к репозиторию Maven Central.
- Необходимые свойства компонентов настроены так, чтобы библиотеки Apache Iceberg™ загружались из Maven Central.
Чтобы создать таблицу в формате Apache Iceberg™ и начать работать с ней:
-
Укажите настройки каталога
, в котором будет находиться таблица.Apache Iceberg™ оперирует таблицами на уровне отдельных каталогов. Настройки каталога указываются на уровне отдельного каталога, нельзя указать настройки для всех каталогов сразу.
Чтобы настроить каталог
sample
типа Hadoop , установите следующие свойства на уровне кластера или на уровне отдельного задания:-
Свойство
spark:spark.sql.catalog.sample
со значениемorg.apache.iceberg.spark.SparkCatalog
. -
Свойство
spark:spark.sql.catalog.sample.type
со значениемhadoop
. -
Свойство
spark:spark.sql.catalog.sample.warehouse
со значениемs3a://<имя_бакета>/warehouse/
.Данные таблиц будут храниться в бакете по пути
warehouse/
.
Подробнее о свойствах, влияющих на настройки каталога, см. в документации Apache Iceberg™
. -
-
Подключитесь по SSH к хосту-мастеру кластера Yandex Data Processing.
-
Запустите сессию Spark SQL:
spark-sql
Все дальнейшие действия будут выполняться в рамках этой сессии.
-
Переключитесь на базу данных
db
в каталогеsample
:USE sample.db;
-
Создайте таблицу
mytable
, состоящую из двух колонок:CREATE TABLE mytable (id bigint, data string) USING iceberg;
-
Посмотрите сведения о таблице:
DESC FORMATTED mytable;
Пример результата:
id bigint data string # Partitioning Not partitioned # Detailed Table Information Name sample.db.mytable Location s3a://<имя_бакета>/warehouse/db/mytable Provider iceberg Owner ubuntu Table Properties [current-snapshot-id=none,format=iceberg/parquet]
-
Вставьте несколько записей в таблицу:
INSERT INTO mytable VALUES (1, 'a'), (2, 'b'), (3, 'c');
-
Выполните тестовый запрос к таблице:
SELECT count(1), data FROM mytable GROUP BY data;
Пример результата:
1 a 1 b 1 c