Delta Lake catalog
Каталог Delta Lake — это тип external catalog, который позволяет запрашивать данные из Delta Lake без необходимости их загрузки.
Также вы можете напрямую преобразовывать и загружать данные из Delta Lake, используя INSERT INTO на основе каталогов Delta Lake. Selena поддерживает каталоги Delta Lake начиная с версии 1.5.0.
Чтобы обеспечить успешное выполнение SQL-запросов в вашем кластере Delta Lake, ваш кластер Selena должен иметь доступ к системе хранения и metastore вашего кластера Delta Lake. Selena поддерживает следующие системы хранения и metastore:
-
Распределенная файловая система (HDFS) или объектное хранилище, такое как AWS S3, Microsoft Azure Storage, Google GCS или другие S3-совместимые системы хранения (например, MinIO)
-
Metastore, такие как Hive metastore или AWS Glue
Если вы выбираете AWS S3 в качестве хранилища, вы можете использовать HMS или AWS Glue в качестве metastore. Если вы выбираете любую другую систему хранения, вы можете использовать только HMS в качестве metastore.
Примечания по использованию
- Формат файлов Delta Lake, который поддерживает Selena, — это Parquet. Файлы Parquet поддерживают следующие форматы сжатия: SNAPPY, LZ4, ZSTD, GZIP и NO_COMPRESSION.
- Типы данных Delta Lake, которые Selena не поддерживает, — это MAP и STRUCT.
Подготовка к интеграции
Перед созданием Delta Lake catalog убедитесь, что ваш кластер Selena может интегрироваться с системой хранения и metastore вашего кластера Delta Lake.
AWS IAM
Если ваш кластер Delta Lake использует AWS S3 в качестве хранилища или AWS Glue в качестве metastore, выберите подходящий метод аутентификации и выполните необходимые приготов ления, чтобы убедиться, что ваш кластер Selena может получить доступ к соответствующим облачным ресурсам AWS.
Рекомендуются следующие методы аутентификации:
- Instance profile
- Assumed role
- IAM user
Из вышеупомянутых трех методов аутентификации instance profile является наиболее широко используемым.
Для получения дополнительной информации см. Подготовка к аутентификации в AWS IAM.
HDFS
Если вы выбираете HDFS в качестве хранилища, настройте ваш кластер Selena следующим образом:
-
(Необязательно) Установите имя пользователя, которое используется для доступа к вашему кластеру HDFS и Hive metastore. По умолчанию Selena использует имя пользователя процессов FE и BE или CN для доступа к вашему кластеру HDFS и Hive metastore. Вы также можете установить имя пользователя, добавив
export HADOOP_USER_NAME="<user_name>"в начало файла fe/conf/hadoop_env.sh каждого FE и в начало файла be/conf/hadoop_env.sh каждого BE или файла cn/conf/hadoop_env.sh каждого CN. После установки имени пользователя в этих файлах перезапустите каждый FE и каждый BE или CN, чтобы настройки параметров вступили в силу. Вы можете установить только одно имя пользователя для каждого кластера Selena. -
Когда вы запрашиваете данные Delta Lake, FE и BE или CN вашего кластера Selena используют клиент HDFS для доступа к вашему кластеру HDFS. В большинстве случаев вам не нужно настраивать ваш кластер Selena для достижения этой цели, и Selena запускает клиент HDFS, используя конфигурации по умолчанию. Вам нужно настроить ваш кластер Selena только в следующих ситуациях:
- Высокая доступность (HA) включена для вашего кластера HDFS: Добавьте файл hdfs-site.xml вашего кластера HDFS в путь $FE_HOME/conf каждого FE и в путь $BE_HOME/conf каждого BE или путь $CN_HOME/conf каждого CN.
- View File System (ViewFs) включена для вашего кластера HDFS: Добавьте файл core-site.xml вашего кластера HDFS в путь $FE_HOME/conf каждого FE и в путь $BE_HOME/conf каждого BE или путь $CN_HOME/conf каждого CN.
примечаниеЕсли при отправке запроса возвращается ошибка, указывающая на неизвестный хост, вы должны добавить сопоставление между именами хостов и IP-адресами узлов вашего кластера HDFS в путь /etc/hosts.
Аутентификация Kerberos
Если аутентификация Kerberos включена для вашего кластера HDFS или Hive metastore, настройте ваш кластер Selena следующим образом:
- Выполните команду
kinit -kt keytab_path principalна каждом FE и каждом BE или CN, чтобы получить Ticket Granting Ticket (TGT) от Key Distribution Center (KDC). Для выполнения этой команды у вас должны быть разрешения на доступ к вашему кластеру HDFS и Hive metastore. Обратите внимание, что доступ к KDC с помощью этой команды зависит от времени. Поэтому вам нужно использовать cron для периодического выполнения этой команды. - Добавьте
JAVA_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf"в файл $FE_HOME/conf/fe.conf каждого FE и в файл $BE_HOME/conf/be.conf каждого BE или файл $CN_HOME/conf/cn.conf каждого CN. В этом примере/etc/krb5.conf— это путь сохранения файла krb5.conf. Вы можете изменить путь в соответствии с вашими потребностями.
Создание Delta Lake catalog
Синтаксис
CREATE EXTERNAL CATALOG <catalog_name>
[COMMENT <comment>]
PROPERTIES
(
"type" = "deltalake",
MetastoreParams,
StorageCredentialParams,
MetadataUpdateParams
)
Параметры
catalog_name
Имя Delta Lake catalog. Соглашения об именовании следующие:
- Имя может содержать буквы, цифры (0-9) и подчеркивания (_). Оно должно начинаться с буквы.
- Имя чувствительно к регистру и не может превышать 1023 символа в длину.
comment
Описание Delta Lake catalog. Этот параметр необязательный.
type
Тип вашего источника данных. Установите значение deltalake.
MetastoreParams
Набор параметров о том, как Selena интегрируется с metastore вашего источника данных.
Hive metastore
Если вы выбираете Hive metastore в качестве metastore вашего источника данных, настройте MetastoreParams следующим образом:
"hive.metastore.type" = "hive",
"hive.metastore.uris" = "<hive_metastore_uri>"
Перед запросом данных Delta Lake вы должны добавить сопоставление между именами хостов и IP-адресами узлов вашего Hive metastore в путь /etc/hosts. В противном случае Selena может не получить доступ к вашему Hive metastore при запуске запроса.
В следующей таблице описан параметр, который вам нужно настроить в MetastoreParams.
| Параметр | Обязательный | Описание |
|---|---|---|
| hive.metastore.type | Да | Тип metastore, который вы используете для вашего кластера Delta Lake. Установите значение hive. |
| hive.metastore.uris | Да | URI вашего Hive metastore. Формат: thrift://<metastore_IP_address>:<metastore_port>.Если высокая доступность (HA) включена для вашего Hive metastore, вы можете указать несколько URI metastore и разделить их запятыми ( ,), например, "thrift://<metastore_IP_address_1>:<metastore_port_1>,thrift://<metastore_IP_address_2>:<metastore_port_2>,thrift://<metastore_IP_address_3>:<metastore_port_3>". |
AWS Glue
Если вы выбираете AWS Glue в качестве metastore вашего источника данных, что поддерживается только при выборе AWS S3 в качестве хранилища, выполните одно из следующих действий:
-
Чтобы выбрать метод аутентификации на основе instance profile, настройте
MetastoreParamsследующим образом:"hive.metastore.type" = "glue",
"aws.glue.use_instance_profile" = "true",
"aws.glue.region" = "<aws_glue_region>" -
Чтобы выбрать метод аутентификации на основе assumed role, настройте
MetastoreParamsследующим образом:"hive.metastore.type" = "glue",
"aws.glue.use_instance_profile" = "true",
"aws.glue.iam_role_arn" = "<iam_role_arn>",
"aws.glue.region" = "<aws_glue_region>" -
Чтобы выбрать метод аутентификации на основе IAM user, настройте
MetastoreParamsследующим образом:"hive.metastore.type" = "glue",
"aws.glue.use_instance_profile" = "false",
"aws.glue.access_key" = "<iam_user_access_key>",
"aws.glue.secret_key" = "<iam_user_secret_key>",
"aws.glue.region" = "<aws_s3_region>"
В следующей таблице описаны параметры, которые вам нужно настроить в MetastoreParams.
| Параметр | Обязательный | Описание |
|---|---|---|
| hive.metastore.type | Да | Тип metastore, который вы используете для вашего кластера Delta Lake. Установите значение glue. |
| aws.glue.use_instance_profile | Да | Указывает, следует ли включить метод аутентификации на основе instance profile и метод аутентификации на основе assumed role. Допустимые значения: true и false. Значение по умолчанию: false. |
| aws.glue.iam_role_arn | Нет | ARN роли IAM, которая имеет привилегии на ваш AWS Glue Data Catalog. Если вы используете метод аутентификации на основе assumed role для доступа к AWS Glue, вы должны указать этот параметр. |
| aws.glue.region | Да | Регион, в котором находится ваш AWS Glue Data Catalog. Пример: us-west-1. |
| aws.glue.access_key | Нет | Ключ доступа вашего пользователя AWS IAM. Если вы используете метод аутентификации на основе IAM user для доступа к AWS Glue, вы должны указать этот параметр. |
| aws.glue.secret_key | Нет | Секретный ключ вашего пользователя AWS IAM. Если вы используете метод аутентификации на основе IAM user для доступа к AWS Glue, вы должны указать этот параметр. |
Для получения информации о том, как выбрать метод аутентификации для доступа к AWS Glue и как настроить политику контроля доступа в консоли AWS IAM, см. Параметры аутентификации для доступа к AWS Glue.
StorageCredentialParams
Набор параметров о том, как Selena интегрируется с вашей системой хранения. Этот набор параметров необязательный.
Если вы используете HDFS в качестве хранилища, вам не нужно настраивать StorageCredentialParams.
Если вы используете AWS S3, другую S3-совместимую систему хранения, Microsoft Azure Storage или Google GCS в качестве хранилища, вы должны настроить StorageCredentialParams.
AWS S3
Если вы выбираете AWS S3 в качестве хранилища для вашего кластера Delta Lake, выполните одно из следующих действий:
-
Чтобы выбрать метод аутентификации на основе instance profile, настройте
StorageCredentialParamsследующим образом:"aws.s3.use_instance_profile" = "true",
"aws.s3.region" = "<aws_s3_region>" -
Чтобы выбрать метод аутентификации на основе assumed role, настройте
StorageCredentialParamsследующим образом:"aws.s3.use_instance_profile" = "true",
"aws.s3.iam_role_arn" = "<iam_role_arn>",
"aws.s3.region" = "<aws_s3_region>" -
Чтобы выбрать метод аутентификации на основе IAM user, настройте
StorageCredentialParamsследующим образом:"aws.s3.use_instance_profile" = "false",
"aws.s3.access_key" = "<iam_user_access_key>",
"aws.s3.secret_key" = "<iam_user_secret_key>",
"aws.s3.region" = "<aws_s3_region>"
В следующей таблице описаны параметры, которые вам нужно настроить в StorageCredentialParams.
| Параметр | Обязательный | Описание |
|---|---|---|
| aws.s3.use_instance_profile | Да | Указывает, следует ли включить метод аутентификации на основе instance profile и метод аутентификации на основе assumed role. Допустимые значения: true и false. Значение по умолчанию: false. |
| aws.s3.iam_role_arn | Нет | ARN роли IAM, которая имеет привилегии на ваш bucket AWS S3. Если вы используете метод аутентификации на основе assumed role для доступа к AWS S3, вы должны указать этот параметр. |
| aws.s3.region | Да | Регион, в котором находится ваш bucket AWS S3. Пример: us-west-1. |
| aws.s3.access_key | Нет | Ключ доступа вашего пользователя IAM. Если вы используете метод аутентификации на основе IAM user для доступа к AWS S3, вы должны указать этот параметр. |
| aws.s3.secret_key | Нет | Секретный ключ вашего пользователя IAM. Если вы используете метод аутентификации на основе IAM user для доступа к AWS S3, вы должны указать этот параметр. |
Для получения информации о том, как выбрать метод аутентификации для доступа к AWS S3 и как настроить политику контроля доступа в консоли AWS IAM, см. Параметры аутентификации для доступа к AWS S3.
S3-совместимая система хранения
Delta Lake catalogs поддерживают S3-совместимые системы хранения начиная с версии 1.5.0.
Если вы выбираете S3-совместимую систему хранения, такую как MinIO, в качестве хранилища для вашего кластера Delta Lake, настройте StorageCredentialParams следующим образом для обеспечения успешной интеграции:
"aws.s3.enable_ssl" = "false",
"aws.s3.enable_path_style_access" = "true",
"aws.s3.endpoint" = "<s3_endpoint>",
"aws.s3.access_key" = "<iam_user_access_key>",
"aws.s3.secret_key" = "<iam_user_secret_key>"
В следующей таблице описаны параметры, которые вам нужно настроить в StorageCredentialParams.
| Параметр | Обязательный | Описание |
|---|---|---|
| aws.s3.enable_ssl | Да | Указывает, следует ли включить SSL-соединение. Допустимые значения: true и false. Значение по умолчанию: true. |
| aws.s3.enable_path_style_access | Да | Указывает, следует ли включить доступ в стиле пути. Допустимые значения: true и false. Значение по умолчанию: false. Для MinIO вы должны установить значение true.URL в стиле пути используют следующий формат: https://s3.<region_code>.amazonaws.com/<bucket_name>/<key_name>. Например, если вы создаете bucket с именем DOC-EXAMPLE-BUCKET1 в регионе US West (Oregon) и хотите получить доступ к объекту alice.jpg в этом bucket, вы можете использовать следующий URL в стиле пути: https://s3.us-west-2.amazonaws.com/DOC-EXAMPLE-BUCKET1/alice.jpg. |
| aws.s3.endpoint | Да | Конечная точка, которая используется для подключения к вашей S3-совместимой системе хранения вместо AWS S3. |
| aws.s3.access_key | Да | Ключ доступа вашего пользователя IAM. |
| aws.s3.secret_key | Да | Секретный ключ вашего пользователя IAM. |
Microsoft Azure Storage
Delta Lake catalogs поддерживают Microsoft Azure Storage начиная с версии 1.5.0.
Azure Blob Storage
Если вы выбираете Blob Storage в качестве хранилища для вашего кластера Delta Lake, выполните одно из следующих действий:
-
Чтобы выбрать метод аутентификации Shared Key, настройте
StorageCredentialParamsследующим образом:"azure.blob.storage_account" = "<storage_account_name>",
"azure.blob.shared_key" = "<storage_account_shared_key>"В следующей таблице описаны параметры, которые вам нужно настроить в
StorageCredentialParams.Параметр Обязательный Описание azure.blob.storage_account Да Имя пользователя вашей учетной записи Blob Storage. azure.blob.shared_key Да Общий ключ вашей учетной записи Blob Storage. -
Чтобы выбрать метод аутентификации SAS Token, настройте
StorageCredentialParamsследующим образом:"azure.blob.storage_account" = "<storage_account_name>",
"azure.blob.container" = "<container_name>",
"azure.blob.sas_token" = "<storage_account_SAS_token>"В следующей таблице описаны параметры, которые вам нужно настроить в
StorageCredentialParams.Параметр Обязательный Описание azure.blob.storage_account Да Имя пользователя вашей учетной записи Blob Storage. azure.blob.container Да Имя blob-контейнера, в котором хранятся ваши данные. azure.blob.sas_token Да SAS-токен, который используется для доступа к вашей учетной записи Blob Storage.
Azure Data Lake Storage Gen2
Если вы выбираете Data Lake Storage Gen2 в качестве хранилища для вашего кластера Delta Lake, выполните одно из следующих действий:
-
Чтобы выбрать метод аутентификации Managed Identity, настройте
StorageCredentialParamsследующим образом:"azure.adls2.oauth2_use_managed_identity" = "true",
"azure.adls2.oauth2_tenant_id" = "<service_principal_tenant_id>",
"azure.adls2.oauth2_client_id" = "<service_client_id>"В следующей таблице описаны параметры, которые вам нужно настроить в
StorageCredentialParams.Параметр Обязательный Описание azure.adls2.oauth2_use_managed_identity Да Указывает, следует ли включить метод аутентификации Managed Identity. Установите значение true.azure.adls2.oauth2_tenant_id Да ID арендатора, к данным которого вы хотите получить доступ. azure.adls2.oauth2_client_id Да ID клиента (приложения) управляемой идентичности. -
Чтобы выбрать метод аутентификации Shared Key, настройте
StorageCredentialParamsследующим образом:"azure.adls2.storage_account" = "<storage_account_name>",
"azure.adls2.shared_key" = "<storage_account_shared_key>"В следующей таблице описаны параметры, которые вам нужно настроить в
StorageCredentialParams.Параметр Обязательный Описание azure.adls2.storage_account Да Имя пользователя вашей учетной записи хранения Data Lake Storage Gen2. azure.adls2.shared_key Да Общий ключ вашей учетной записи хранения Data Lake Storage Gen2. -
Чтобы выбрать метод аутентификации Service Principal, настройте
StorageCredentialParamsследующим образом:"azure.adls2.oauth2_client_id" = "<service_client_id>",
"azure.adls2.oauth2_client_secret" = "<service_principal_client_secret>",
"azure.adls2.oauth2_client_endpoint" = "<service_principal_client_endpoint>"В следующей таблице описаны параметры, которые вам нужно настроить в
StorageCredentialParams.Параметр Обязательный Описание azure.adls2.oauth2_client_id Да ID клиента (приложения) service principal. azure.adls2.oauth2_client_secret Да Значение нового секрета клиента (приложения), созданного. azure.adls2.oauth2_client_endpoint Да Конечная точка OAuth 2.0 токена (v1) service principal или приложения.
Azure Data Lake Storage Gen1
Если вы выбираете Data Lake Storage Gen1 в качестве хранилища для вашего кластера Delta Lake, выполните одно из следующих действий:
-
Чтобы выбрать метод аутентификации Managed Service Identity, настройте
StorageCredentialParamsследующим образом:"azure.adls1.use_managed_service_identity" = "true"В следующей таблице описаны параметры, которые вам нужно настроить в
StorageCredentialParams.Параметр Обязательный Описание azure.adls1.use_managed_service_identity Да Указывает, следует ли включить метод аутентификации Managed Service Identity. Установите значение true. -
Чтобы выбрать метод аутентификации Service Principal, настройте
StorageCredentialParamsследующим образом:"azure.adls1.oauth2_client_id" = "<application_client_id>",
"azure.adls1.oauth2_credential" = "<application_client_credential>",
"azure.adls1.oauth2_endpoint" = "<OAuth_2.0_authorization_endpoint_v2>"В следующей таблице описаны параметры, которые вам нужно настроить в
StorageCredentialParams.Параметр Обязательный Описание azure.adls1.oauth2_client_id Да ID клиента (приложения) service principal. azure.adls1.oauth2_credential Да Значение нового секрета клиента (приложения), созданного. azure.adls1.oauth2_endpoint Да Конечная точка OAuth 2.0 токена (v1) service principal или приложения.
Google GCS
Delta Lake catalogs поддерживают Google GCS начиная с ве рсии 1.5.0.
Если вы выбираете Google GCS в качестве хранилища для вашего кластера Delta Lake, выполните одно из следующих действий:
-
Чтобы выбрать метод аутентификации на основе VM, настройте
StorageCredentialParamsследующим образом:"gcp.gcs.use_compute_engine_service_account" = "true"В следующей таблице описаны параметры, которые вам нужно настроить в
StorageCredentialParams.Параметр Значение по умолчанию Пример значения Описание gcp.gcs.use_compute_engine_service_account false true Указывает, следует ли напрямую использовать учетную запись службы, привязанную к вашему Compute Engine. -
Чтобы выбрать метод аутентификации на основе service account, настройте
StorageCredentialParamsследую щим образом:"gcp.gcs.service_account_email" = "<google_service_account_email>",
"gcp.gcs.service_account_private_key_id" = "<google_service_private_key_id>",
"gcp.gcs.service_account_private_key" = "<google_service_private_key>",В следующей таблице описаны параметры, которые вам нужно настроить в
StorageCredentialParams.Параметр Значение по умолчанию Пример значения Описание gcp.gcs.service_account_email "" "user@hello.iam.gserviceaccount.com" Адрес электронной почты в JSON-файле, созданном при создании учетной записи службы. gcp.gcs.service_account_private_key_id "" "61d257bd8479547cb3e04f0b9b6b9ca07af3b7ea" ID приватного ключа в JSON-файле, созданном при создании учетной записи службы. gcp.gcs.service_account_private_key "" "-----BEGIN PRIVATE KEY----xxxx-----END PRIVATE KEY-----\n" Приватный ключ в JSON-файле, созданном при создании учетной записи службы. -
Чтобы выбрать метод аутентификации на основе impersonation, настройте
StorageCredentialParamsследующим образом:-
Заставить экземпляр VM имитировать учетную запись службы:
"gcp.gcs.use_compute_engine_service_account" = "true",
"gcp.gcs.impersonation_service_account" = "<assumed_google_service_account_email>"В следующей таблице описаны параметры, которые вам нужно настроить в
StorageCredentialParams.Параметр Значение по умолчанию Пример значения Описание gcp.gcs.use_compute_engine_service_account false true Указывает, следует ли напрямую использовать учетную запись службы, привязанную к вашему Compute Engine. gcp.gcs.impersonation_service_account "" "hello" Учетная запись службы, которую вы хотите имитировать. -
Заставить учетную запись службы (временно названную мета-учетной записью службы) имитировать другую учетную запись службы (временно названную учетной записью службы данных):
"gcp.gcs.service_account_email" = "<google_service_account_email>",
"gcp.gcs.service_account_private_key_id" = "<meta_google_service_account_email>",
"gcp.gcs.service_account_private_key" = "<meta_google_service_account_email>",
"gcp.gcs.impersonation_service_account" = "<data_google_service_account_email>"В следующей таблице описаны параметры, которые вам нужно настроить в
StorageCredentialParams.Параметр Значение по умолчанию Пример значения Описание gcp.gcs.service_account_email "" "user@hello.iam.gserviceaccount.com" Адрес электронной почты в JSON-файле, созданном при создании мета-учетной записи службы. gcp.gcs.service_account_private_key_id "" "61d257bd8479547cb3e04f0b9b6b9ca07af3b7ea" ID приватного ключа в JSON-файле, созданном при создании мета-учетной записи службы. gcp.gcs.service_account_private_key "" "-----BEGIN PRIVATE KEY----xxxx-----END PRIVATE KEY-----\n" Приватный ключ в JSON-файле, созданном при создании мета-учетной записи службы. gcp.gcs.impersonation_service_account "" "hello" Учетная запись службы данных, которую вы хотите имитировать.
-
MetadataUpdateParams
Набор параметров о том, как Selena обновляет кэшированные метаданные Delta Lake. Этот набор параметров необязательный.
Начиная с версии 1.5.0, Delta Lake Catalog поддерживает Локальное кэширование и извлечение метаданных. В большинстве случаев вы можете игнорировать MetadataUpdateParams и не нужно настраивать параметры политики в нем, поскольку значения по умолчанию этих параметров уже обеспечивают готовую к использованию производительность.
Однако, если частота обновления данных в Delta Lake высока, вы можете настроить эти параметры для дальнейшей оптимизации производительности автоматических асинхронных обновлений.
В большинстве случаев, если ваши данные Delta Lake обновляются с детализацией 1 час или меньше, частота обновления данных считается высокой.
| Параметр | Единица | По умолчанию | Описание |
|---|---|---|---|
| enable_deltalake_table_cache | - | true | Включить ли Table Cache в кэше метаданных для Delta Lake. |
| enable_deltalake_json_meta_cache | - | true | Включить ли кэш для JSON-файлов Delta Log. |
| deltalake_json_meta_cache_ttl_sec | Секунда | 48 * 60 * 60 | Time-To-Live (TTL) для кэша JSON-файлов Delta Log. |
| deltalake_json_meta_cache_memory_usage_ratio | - | 0.1 | Максимальное соотношение размера JVM Heap, занимаемого кэшем JSON-файлов Delta Log. |
| enable_deltalake_checkpoint_meta_cache | - | true | Включить ли кэш для файлов Checkpoint Delta Log. |
| deltalake_checkpoint_meta_cache_ttl_sec | Секунда | 48 * 60 * 60 | Time-To-Live (TTL) для кэша файлов Checkpoint Delta Log. |
| deltalake_checkpoint_meta_cache_memory_usage_ratio | - | 0.1 | Максимальное соотношение размера JVM Heap, занимаемого кэшем файлов Checkpoint Delta Log. |