Metastores (технические каталоги)#
CedrusData поддерживает работу с озерами данных с помощью коннекторов Hive, Iceberg, Delta Lake и Hudi. Для работы большинства данных коннекторов необходим так называемый metastore который содержит информацию о том, как представить файлы озера данных в качестве схем и таблиц CedrusData.
Metastore для коннектора Iceberg#
При работе с коннектором Iceberg необходимо задать тип metastore c помощью параметра конфигурации iceberg.catalog.type
.
Примечание
Для работы с Iceberg мы рекомендуем использовать CedrusData Catalog] — высокопроизводительный каталог для Iceberg с поддержкой материализованных представлений и протокола Iceberg REST.
Допустимые значения:
cedrusdata_catalog
: Использовать CedrusData Catalog] (рекомендуемый вариант)rest
: Использовать Iceberg REST Cataloghive_metastore
: Использовать Hive Metastorejdbc
: Использовать JDBC Catalognessie
: Использовать Nessieglue
: Использовать AWS Glue Catalogsnowflake
: Использовать Snowflake Catalog
CedrusData Catalog#
CedrusData Catalog — это высокопроизводительный каталог для Iceberg с поддержкой материализованных представлений и протокола Iceberg REST.
Примечание
CedrusData Catalog поддерживает наибольшее количество функций Iceberg, включая материализованные представления. Мы рекомендуем использовать CedrusData Catalog для всех новых проектов.
Вы можете подключиться к CedrusData Catalog в нативном режиме или через Iceberg REST протокол. Подключение в нативном режиме обеспечивает более высокую производительность и поддержку материализованных представлений. Процесс подключения в нативном режиме подробно описан в документе Работа с Iceberg через CedrusData Catalog.
Для подключения через Iceberg REST протокол воспользуйтесь разделом REST Catalog.
REST Catalog#
Вы можете использовать в качестве metastore любой сервис, который поддерживает протокол Iceberg REST. REST Catalog поддерживает виртуальные представления согласно Iceberg View specification. REST Catalog не поддерживает материализованные представления.
Примечание
Материализованные представления поддерживают CedrusData Catalog при работе в нативном режиме, а также Hive Metastore Catalog.
Примеры продуктов, которые поддерживают протокол Iceberg REST:
CedrusData Catalog (рекомендуем подключаться в нативном режиме)
Polaris
Для использования REST каталога необходимо задать параметр конфигурации каталога iceberg.catalog.type=rest
, после чего задать дополнительные параметры, описанные ниже.
Параметр |
Описание |
---|---|
|
URI каталога. Например: Например: |
|
Префикс, который будет использован для доступа к каталогу. Эквивалентен свойству Iceberg REST |
|
Название warehouse, которое будет передано каталогу в процессе инициализации. Эквивалентен свойству Iceberg REST |
|
Режим аутентификации. Допустимые значения: |
|
Задает значение, которое будет использовано в качестве bearer токена аутентификации. Эквивалентен свойству Iceberg REST |
|
Задает значение, которое будет использовано в качестве credential. Эквивалентен свойству Iceberg REST |
|
Строка, которая будет передана в качестве scope при аутентификации с использованием механизма credential. |
|
Режим работы с каталогом. Допустимые значения: |
Примечание
Значение и смысл многих передаваемых параметров конфигурации зависит от конкретной реализации каталога.
Например, различные каталоги могут по-разному поддерживать и обрабатывать параметры prefix
и warehouse
.
Например, CedrusData Catalog использует параметр warehouse
для указания логического каталога Iceberg, с которым будет происходить дальнейшая работа.
Пример конфигурации для подключения к CedrusData Catalog для REST Iceberg:
connector.name=iceberg
iceberg.catalog.type=rest
iceberg.rest-catalog.uri=http://example-catalog:9080/catalog/iceberg
iceberg.rest-catalog.warehouse=ice_prod
iceberg.rest-catalog.security=oauth2
iceberg.rest-catalog.oauth2.credential=${ENV:CATALOG_ACCESS_TOKEN}
iceberg.rest-catalog.session =user
Hive Metastore Catalog#
Коннектор Iceberg может использовать Hive Metastore для хранения метаданных. Для использования Hive Metastore задайте параметр iceberg.catalog.type=hive_metastore
.
Остальные параметры Hive Metastore идентичны параметрам, указанным в секции Hive Metastore.
JDBC Catalog#
Вы можете использовать в качестве metastore JDBC Catalog. JDBC Catalog — это база данных, с которой CedrusData взаимодействует по протоколу JDBC.
JDBC Catalog поддерживает виртуальные представления согласно Iceberg View specification. JDBC Catalog не поддерживает материализованные представления.
Предупреждение
При использовании JDBC Catalog у вас могут возникнуть проблемы совместимости в будущем, если сообщество Iceberg примет решение сделать несовместимые изменения. Мы рекомендуем использовать CedrusData Catalog или REST Catalog.
Предупреждение
При использовании JDBC catalog вы должны создать таблицы в базе данных самостоятельно. См. Iceberg repository.
Для конфигурации JDBC каталога необходимо указать JDBC URL и другие параметры подключения,
а также положить JDBC драйвер соответствующей СУБД в директорию plugin/iceberg
.
Параметр |
Описание |
---|---|
|
Fully-qualified имя класса JDBC драйвера. |
|
URL для подключения по JDBC. |
|
Имя пользователя для подключения по JDBC. |
|
Пароль для подключения по JDBC. |
|
Имя логического каталога, которое будет сохранено в СУБД |
|
Путь в файловой системе, который будет использован по умолчанию для создания таблиц и представлений. Например, |
|
Версия схемы JDBC. Допустимые значения: |
Пример конфигурации JDBC Catalog:
connector.name=iceberg
iceberg.catalog.type=jdbc
iceberg.jdbc-catalog.catalog-name=test
iceberg.jdbc-catalog.driver-class=org.postgresql.Driver
iceberg.jdbc-catalog.connection-url=jdbc:postgresql://example.net:5432/database
iceberg.jdbc-catalog.connection-user=admin
iceberg.jdbc-catalog.connection-password=test
iceberg.jdbc-catalog.default-warehouse-dir=s3://bucket
Nessie Catalog#
Примечание
Ниже приведена оригинальная документация Trino. Скоро мы ее переведем на русский язык и дополним полезными примерами.
In order to use a Nessie catalog, configure the catalog type with
iceberg.catalog.type=nessie
and provide further details with the following
properties:
Property name |
Description |
---|---|
|
Nessie API endpoint URI (required). Example:
|
|
The branch/tag to use for Nessie. Defaults to |
|
Default warehouse directory for schemas created without an explicit
|
|
The read timeout duration for requests to the Nessie
server. Defaults to |
|
The connection timeout duration for connection
requests to the Nessie server. Defaults to |
|
Configure whether compression should be enabled or not for requests to the
Nessie server. Defaults to |
|
The authentication type to use. Available value is |
|
The token to use with |
|
Optional version of the Client API version to use. By default it is inferred from the |
connector.name=iceberg
iceberg.catalog.type=nessie
iceberg.nessie-catalog.uri=https://localhost:19120/api/v2
iceberg.nessie-catalog.default-warehouse-dir=/tmp
The Nessie catalog does not support view management or materialized view management.
Iceberg-specific Glue catalog configuration properties#
Примечание
Ниже приведена оригинальная документация Trino. Скоро мы ее переведем на русский язык и дополним полезными примерами.
When using the Glue catalog, the Iceberg connector supports the same general Glue configuration properties as previously described with the following additional property:
Property name |
Description |
Default |
---|---|---|
|
Skip archiving an old table version when creating a new version in a commit. See AWS Glue Skip Archive. |
|
Snowflake catalog#
Примечание
Ниже приведена оригинальная документация Trino. Скоро мы ее переведем на русский язык и дополним полезными примерами.
In order to use a Snowflake catalog, configure the catalog type with
iceberg.catalog.type=snowflake
and provide further details with the following
properties:
Property name |
Description |
---|---|
|
Snowflake JDBC account URI (required). Example:
|
|
Snowflake user (required). |
|
Snowflake password (required). |
|
Snowflake database name (required). |
|
Snowflake role name |
connector.name=iceberg
iceberg.catalog.type=snowflake
iceberg.snowflake-catalog.account-uri=jdbc:snowflake://example1234567890.snowflakecomputing.com
iceberg.snowflake-catalog.user=user
iceberg.snowflake-catalog.password=secret
iceberg.snowflake-catalog.database=db
When using the Snowflake catalog, data management tasks such as creating tables,
must be performed in Snowflake because using the catalog from external systems
like Trino only supports SELECT
queries and other read operations.
Additionally, the Snowflake-created Iceberg tables do not expose partitioning information, which prevents efficient parallel reads and therefore can have significant negative performance implications.
The Snowflake catalog does not support view management or materialized view management.
Further information is available in the Snowflake catalog documentation.
Metastore для коннекторов Hive, Delta Lake и Hudi#
При работе с коннекторами Hive, Delta Lake и Hudi вы можете использовать два типа metastore: Hive Metastore и AWS Glue.
Hive Metastore#
Для использования Hive Metastore необходимо задать параметр конфигурации каталога hive.metastore=thrift
.
Примечание
Если вы используете Hive Metastore для коннектора Iceberg, то необходимо задать параметр конфигурации iceberg.catalog.type=hive_metastore
вместо hive.metastore=thrift
.
Работа с Hive Metastore происходит по протоколу Thrift.
Общая конфигурация Hive Metastore#
Параметр |
Описание |
---|---|
|
URI для подключения к Hive Metastore. Можно задать несколько URI через запятую. В таком случае будет использован первый URI,
но в случае его недоступности CedrusData будет использовать другие URI в порядке указания.
Примеры: |
|
Имя пользователя для подключения к Hive Metastore. |
|
Имя логического каталога Hive Metastore. Используйте данное свойство, если вы хотите использовать Hive Metastore для работы с несколькими логическими каталогами. |
|
Таймаут подключения к Hive Metastore. Значение по умолчанию: |
|
Таймаут чтения данных из Hive Metastore. Значение по умолчанию: |
|
Включает использование статистики таблицы Hive, которые были созданы при записи данных из Apache Spark. Значение по умолчанию: |
|
TTL для кэша delegation token. Значение по умолчанию: |
|
Максимальный размер кэша delegation token. Значение по умолчанию: |
|
Использовать ли SSL при подключении к Hive Metastore. Значение по умолчанию: |
|
Путь к keystore для подключения к Hive Metastore. |
|
Пароль от keystore для подключения к Hive Metastore. |
|
Путь к truststore для подключения к Hive Metastore. |
|
Пароль от truststore для подключения к Hive Metastore |
|
Получать ли список таблиц и представлений из всех схем Hive Metastore в рамках одного запроса. Значение по умолчанию: |
|
Удалять ли самостоятельно файлы данных managed таблиц Hive в процессе выполнения команд по удалению таблиц или партиций,
когда Hive Metastore не удаляет эти данные самостоятельно. Значение по умолчанию: |
|
Позволить Hive Metastore предположить, что значения ключей партиционирования могут быть конвертированы в строки.
Включение данной опций может улучшить производительность, когда присутствуют фильтр на колонках партиционирования.
Значения |
|
SOCKS proxy, который будет использован при взаимодействии с Hive Metastore. |
|
Максимальное количество retry при отправке запросов в Hive Metastore. |
|
Scale factor для определения задержки в случае retry. Значение по умолчанию: |
|
Общее время, которое может быть потрачено на retry. Значение по умолчанию: |
|
Минимальная задержка между retry запросов. Значение по умолчанию: |
|
Максимальная задержка между retry запросов. Значение по умолчанию: |
|
Максимальное время, в течение которого можно ожидать получения блокировки транзакции. Значение по умолчанию: |
Вы также можете подключиться к Hive Metastore по протоколу HTTP.
Для этого необходимо задать параметр hive.metastore.uri
с использованием протокола http://
или https://
.
Параметры |
Название |
---|---|
|
Способ аутентификации. Единственное поддерживаемое на данный момент значение — |
|
Bearer токен аутентификации, который будет использован, если подключение происходит по протоколу |
|
Дополнительные заголовки, которые будут добавлены к HTTP-запросам к Hive Metastore.
Заголовки должны быть разделены запятой. Имя и значение заголовка должно быть разделено двоеточием.
Например: |
Аутентификация в Hive Metastore#
Если вы используете керберизованного кластер Hadoop, CedrusData будет подключаться к сервису Hive Metastore через SASL и проходить аутентификацию через Kerberos.
Используйте перечисленные ниже параметры для настройки подключения к Hive Metastore через Kerberos.
Параметр |
Описание |
---|---|
|
Способ аутентификации. |
|
Включает имперсонацию при взаимодействии с Hive Metastore. Значение по умолчанию: |
|
Kerberos principal сервиса Hive Metastore. Используется при Вы можете использовать метку Примеры: |
|
Kerberos principal, который использует CedrusData для подключения к Hive Metastore. Используется при Вы можете использовать метку Если имперсонация включена, указанный principal должен иметь права на имперсонацию текущего пользователя CedrusData, как описано в HDFS impersonation.
Если имперсонация отключена, principal должен иметь достаточные привилегии для удаления файлов в директории Внимание: Если principal не имеет достаточных привилегий, то при удалении таблицы будут удалены только метаданные. Это происходит, потому что за удаление данных отвечает непосредственно Hive Metastore. И когда включен Kerberos, то ошибки доступа при удалении файлов не будут доставлены до CedrusData из-за особенностей реализации Hive Metastore. Примеры: |
|
Путь к keytab, принадлежащему указанному в параметре |
Пример конфигурации с отключенной аутентификацией#
hive.metastore.authentication.type=NONE
Пример конфигурации аутентификации через Kerberos с имперсонацией#
hive.metastore.authentication.type=KERBEROS
hive.metastore.thrift.impersonation.enabled=true
hive.metastore.service.principal=hive/hive-metastore-host.example.com@EXAMPLE.COM
hive.metastore.client.principal=trino@EXAMPLE.COM
hive.metastore.client.keytab=/etc/trino/hive.keytab
При подключении CedrusData использует principal trino@EXAMPLE.COM
и его keytab /etc/trino/hive.keytab
.
После аутентификации CedrusData проверяет, что principal сервиса Hive Metastore совпадает с hive/hive-metastore-host.example.com@EXAMPLE.COM
.
Кэширование при работе с Hive Metastore#
CedrusData позволяет кэшировать данные из Hive Metastore для снижения времени выполнения SQL-запросов. Используйте параметры ниже для конфигурации кэша данных из Hive Metastore.
Параметр |
Описание |
---|---|
|
Задает TTL для кэша метаданных. Нулевое значение означает, что кэш метаданных отключен.
Значение по умолчанию: |
|
Задает TTL для кэша статистик таблиц. Нулевое значение означает, что кэш статистик отключен.
Значение по умолчанию: |
|
Максимальное количество объектов, которое может быть закэшировано. Значение по умолчанию: |
|
Кэшировать ли метаданные партиций. Значение по умолчанию: |
|
Кэшировать ли факт отсутствия таблицы. Значение по умолчанию: |
|
Кэшировать ли факт отсутствия партиции. Значение по умолчанию: |
|
Кэшировать ли факт отсутствия статистик конкретной таблицы. Значение по умолчанию: |
|
Задает частоту обновления метаданных закэшированных объектов. |
|
Максимальное количество потоков, осуществляющих обновление метаданных закэшированных объектов. Значение по умолчанию: |
Работа с Avro#
Если вы работаете с форматом Avro совместно с Hive Metastore, необходимо добавить следующий параметр конфигурации в hive-site.xml
:
<property>
<!-- https://community.hortonworks.com/content/supportkb/247055/errorjavalangunsupportedoperationexception-storage.html -->
<name>metastore.storage.schema.reader.impl</name>
<value>org.apache.hadoop.hive.metastore.SerDeStorageSchemaReader</value>
</property>
AWS Glue catalog configuration properties#
Примечание
Ниже приведена оригинальная документация Trino. Скоро мы ее переведем на русский язык и дополним полезными примерами.
In order to use an AWS Glue catalog, you must configure your catalog file as follows:
hive.metastore=glue
and provide further details with the following
properties:
Property Name |
Description |
Default |
---|---|---|
|
AWS region of the Glue Catalog. This is required when not running in EC2, or
when the catalog is in a different region. Example: |
|
|
Glue API endpoint URL (optional). Example:
|
|
|
AWS region of the STS service to authenticate with. This is required when
running in a GovCloud region. Example: |
|
|
STS endpoint URL to use when authenticating to Glue (optional). Example:
|
|
|
Pin Glue requests to the same region as the EC2 instance where Trino is running. |
|
|
Max number of concurrent connections to Glue. |
|
|
Maximum number of error retries for the Glue client. |
|
|
Default warehouse directory for schemas created without an explicit
|
|
|
If you are running Trino on Amazon EKS, and authenticate using a Kubernetes
service account, you can set this property to |
|
|
AWS access key to use to connect to the Glue Catalog. If specified along
with |
|
|
AWS secret key to use to connect to the Glue Catalog. If specified along
with |
|
|
The ID of the Glue Catalog in which the metadata database resides. |
|
|
ARN of an IAM role to assume when connecting to the Glue Catalog. |
|
|
External ID for the IAM role trust policy when connecting to the Glue Catalog. |
|
|
Number of segments for partitioned Glue tables. |
|
|
Controls whether to hide Delta Lake tables in table listings. Currently applies only when using the AWS Glue metastore. |
|
Athena partition projection#
Примечание
Ниже приведена оригинальная документация Trino. Скоро мы ее переведем на русский язык и дополним полезными примерами.
Partition projection is a feature of AWS Athena often used to speed up query processing with highly partitioned tables when using the Hive connector.
Trino supports partition projection table properties stored in the Hive
metastore or Glue catalog, and it reimplements this functionality. Currently,
there is a limitation in comparison to AWS Athena for date projection, as it
only supports intervals of DAYS
, HOURS
, MINUTES
, and SECONDS
.
If there are any compatibility issues blocking access to a requested table when
partition projection is enabled, set the
partition_projection_ignore
table property to true
for a table to bypass
any errors.
Refer to Table properties and Column properties for configuration of partition projection.