Перейти к основному содержимому
Версия: 2.0.x

Hudi catalog

Hudi catalog - это тип external catalog, который позволяет вам запрашивать данные из Apache Hudi без необходимости загрузки.

Также вы можете напрямую трансформировать и загружать данные из Hudi с помощью INSERT INTO на основе Hudi catalogs. Selena поддерживает Hudi catalogs начиная с версии v1.5.2.

Чтобы обеспечить успешное выполнение SQL-операций на вашем Hudi cluster, ваш Selena cluster должен иметь доступ к системе хранения и metastore вашего Hudi cluster. Selena поддерживает следующие системы хранения и metastore:

  • Distributed file system (HDFS) или object storage, такие как AWS S3, Microsoft Azure Storage, Google GCS или другие S3-совместимые системы хранения (например, MinIO)

  • Metastore, такие как Hive metastore или AWS Glue

    ПРИМЕЧАНИЕ

    Если вы выберете AWS S3 в качестве хранилища, вы можете использовать HMS или AWS Glue в качестве metastore. Если вы выберете любую другую систему хранения, вы можете использовать только HMS в качестве metastore.

Примечания по использованию

  • Формат файлов Hudi, который поддерживает Selena, - это Parquet. Файлы Parquet поддерживают следующие форматы сжатия: SNAPPY, LZ4, ZSTD, GZIP и NO_COMPRESSION.
  • Selena обеспечивает полную поддержку таблиц Copy On Write (COW) и Merge On Read (MOR) из Hudi.

Подготовка к интеграции

Перед созданием Hudi catalog убедитесь, что ваш Selena cluster может интегрироваться с системой хранения и metastore вашего Hudi cluster.

AWS IAM

Если ваш Hudi cluster использует AWS S3 в качестве хранилища или AWS Glue в качестве metastore, выберите подходящий метод аутентификации и выполните необходимые подготовительные действия, чтобы ваш Selena cluster мог получить доступ к соответствующим облачным ресурсам AWS.

Рекомендуются следующие методы аутентификации:

  • Instance profile
  • Assumed role
  • IAM user

Из этих трех методов аутентификации наиболее широко используется instance profile.

Для получения дополнительной информации см. Подготовка к аутентификации в AWS IAM.

HDFS

Если вы выбрали HDFS в качестве хранилища, настройте ваш Selena cluster следующим образом:

  • (Опционально) Установите имя пользователя, которое используется для доступа к вашему HDFS cluster и Hive metastore. По умолчанию Selena использует имя пользователя процессов FE и BE или CN для доступа к вашему HDFS cluster и 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 cluster.

  • Когда вы запрашиваете данные Hudi, FE и BE или CN вашего Selena cluster используют HDFS client для доступа к вашему HDFS cluster. В большинстве случаев вам не нужно настраивать ваш Selena cluster для этой цели, и Selena запускает HDFS client с использованием конфигураций по умолчанию. Вам нужно настроить ваш Selena cluster только в следующих ситуациях:

    • High availability (HA) включена для вашего HDFS cluster: Добавьте файл hdfs-site.xml вашего HDFS cluster в путь $FE_HOME/conf каждого FE и в путь $BE_HOME/conf каждого BE или путь $CN_HOME/conf каждого CN.
    • View File System (ViewFs) включена для вашего HDFS cluster: Добавьте файл core-site.xml вашего HDFS cluster в путь $FE_HOME/conf каждого FE и в путь $BE_HOME/conf каждого BE или путь $CN_HOME/conf каждого CN.

ПРИМЕЧАНИЕ

Если при отправке запроса возвращается ошибка, указывающая на неизвестный хост, вы должны добавить сопоставление между именами хостов и IP-адресами узлов вашего HDFS cluster в путь /etc/hosts.

Аутентификация Kerberos

Если аутентификация Kerberos включена для вашего HDFS cluster или Hive metastore, настройте ваш Selena cluster следующим образом:

  • Выполните команду kinit -kt keytab_path principal на каждом FE и каждом BE или CN для получения Ticket Granting Ticket (TGT) из Key Distribution Center (KDC). Для выполнения этой команды вы должны иметь разрешения на доступ к вашему HDFS cluster и 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. Вы можете изменить путь в соответствии с вашими потребностями.

Создание Hudi catalog

Синтаксис

CREATE EXTERNAL CATALOG <catalog_name>
[COMMENT <comment>]
PROPERTIES
(
"type" = "hudi",
MetastoreParams,
StorageCredentialParams,
MetadataUpdateParams
)

Параметры

catalog_name

Имя Hudi catalog. Соглашения об именовании следующие:

  • Имя может содержать буквы, цифры (0-9) и подчеркивания (_). Оно должно начинаться с буквы.
  • Имя чувствительно к регистру и не может превышать 1023 символа в длину.

comment

Описание Hudi catalog. Этот параметр необязателен.

type

Тип вашего источника данных. Установите значение hudi.

MetastoreParams

Набор параметров о том, как Selena интегрируется с metastore вашего источника данных.

Hive metastore

Если вы выбрали Hive metastore в качестве metastore вашего источника данных, настройте MetastoreParams следующим образом:

"hive.metastore.type" = "hive",
"hive.metastore.uris" = "<hive_metastore_uri>"

ПРИМЕЧАНИЕ

Перед запросом данных Hudi вы должны добавить сопоставление между именами хостов и IP-адресами узлов вашего Hive metastore в путь /etc/hosts. В противном случае Selena может не получить доступ к вашему Hive metastore при запуске запроса.

В следующей таблице описан параметр, который вам нужно настроить в MetastoreParams.

ПараметрОбязательныйОписание
hive.metastore.typeДаТип metastore, который вы используете для вашего Hudi cluster. Установите значение hive.
hive.metastore.urisДаURI вашего Hive metastore. Формат: thrift://<metastore_IP_address>:<metastore_port>.
Если high availability (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, который вы используете для вашего Hudi cluster. Установите значение 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НетAccess key вашего AWS IAM user. Если вы используете метод аутентификации на основе IAM user для доступа к AWS Glue, вы должны указать этот параметр.
aws.glue.secret_keyНетSecret key вашего AWS IAM user. Если вы используете метод аутентификации на основе IAM user для доступа к AWS Glue, вы должны указать этот параметр.

Для получения информации о том, как выбрать метод аутентификации для доступа к AWS Glue и как настроить политику контроля доступа в AWS IAM Console, см. Параметры аутентификации для доступа к AWS Glue.

StorageCredentialParams

Набор параметров о том, как Selena интегрируется с вашей системой хранения. Этот набор параметров необязателен.

Если вы используете HDFS в качестве хранилища, вам не нужно настраивать StorageCredentialParams.

Если вы используете AWS S3, другую S3-совместимую систему хранения, Microsoft Azure Storage или Google GCS в качестве хранилища, вы должны настроить StorageCredentialParams.

AWS S3

Если вы выбрали AWS S3 в качестве хранилища для вашего Hudi cluster, выполните одно из следующих действий:

  • Чтобы выбрать метод аутентификации на основе 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 роли, которая имеет привилегии на ваш AWS S3 bucket. Если вы используете метод аутентификации на основе assumed role для доступа к AWS S3, вы должны указать этот параметр.
aws.s3.regionДаРегион, в котором находится ваш AWS S3 bucket. Пример: us-west-1.
aws.s3.access_keyНетAccess key вашего IAM user. Если вы используете метод аутентификации на основе IAM user для доступа к AWS S3, вы должны указать этот параметр.
aws.s3.secret_keyНетSecret key вашего IAM user. Если вы используете метод аутентификации на основе IAM user для доступа к AWS S3, вы должны указать этот параметр.

Для получения информации о том, как выбрать метод аутентификации для доступа к AWS S3 и как настроить политику контроля доступа в AWS IAM Console, см. Параметры аутентификации для доступа к AWS S3.

S3-совместимая система хранения

Hudi catalogs поддерживают S3-совместимые системы хранения начиная с версии v1.5.2.

Если вы выбрали S3-совместимую систему хранения, такую как MinIO, в качестве хранилища для вашего Hudi cluster, настройте 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ДаEndpoint, который используется для подключения к вашей S3-совместимой системе хранения вместо AWS S3.
aws.s3.access_keyДаAccess key вашего IAM user.
aws.s3.secret_keyДаSecret key вашего IAM user.
Microsoft Azure Storage

Hudi catalogs поддерживают Microsoft Azure Storage начиная с версии v1.5.2.

Azure Blob Storage

Если вы выбрали Blob Storage в качестве хранилища для вашего Hudi cluster, выполните одно из следующих действий:

  • Чтобы выбрать метод аутентификации 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Да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 container, в котором хранятся ваши данные.
    azure.blob.sas_tokenДаSAS token, который используется для доступа к вашей учетной записи Blob Storage.
Azure Data Lake Storage Gen2

Если вы выбрали Data Lake Storage Gen2 в качестве хранилища для вашего Hudi cluster, выполните одно из следующих действий:

  • Чтобы выбрать метод аутентификации 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 tenant, данные которого вы хотите получить.
    azure.adls2.oauth2_client_idДаClient (application) ID managed identity.
  • Чтобы выбрать метод аутентификации 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Да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ДаClient (application) ID service principal.
    azure.adls2.oauth2_client_secretДаЗначение нового созданного client (application) secret.
    azure.adls2.oauth2_client_endpointДаOAuth 2.0 token endpoint (v1) service principal или application.
Azure Data Lake Storage Gen1

Если вы выбрали Data Lake Storage Gen1 в качестве хранилища для вашего Hudi cluster, выполните одно из следующих действий:

  • Чтобы выбрать метод аутентификации 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ДаClient (application) ID service principal.
    azure.adls1.oauth2_credentialДаЗначение нового созданного client (application) secret.
    azure.adls1.oauth2_endpointДаOAuth 2.0 token endpoint (v1) service principal или application.
Google GCS

Hudi catalogs поддерживают Google GCS начиная с версии v1.5.2.

Если вы выбрали Google GCS в качестве хранилища для вашего Hudi cluster, выполните одно из следующих действий:

  • Чтобы выбрать метод аутентификации на основе VM, настройте StorageCredentialParams следующим образом:

    "gcp.gcs.use_compute_engine_service_account" = "true"

    В следующей таблице описаны параметры, которые вам нужно настроить в StorageCredentialParams.

    ПараметрЗначение по умолчаниюПример значенияОписание
    gcp.gcs.use_compute_engine_service_accountfalsetrueУказывает, использовать ли напрямую service account, привязанный к вашему 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-файле, созданном при создании service account.
    gcp.gcs.service_account_private_key_id"""61d257bd8479547cb3e04f0b9b6b9ca07af3b7ea"ID private key в JSON-файле, созданном при создании service account.
    gcp.gcs.service_account_private_key"""-----BEGIN PRIVATE KEY----xxxx-----END PRIVATE KEY-----\n"Private key в JSON-файле, созданном при создании service account.
  • Чтобы выбрать метод аутентификации на основе impersonation, настройте StorageCredentialParams следующим образом:

    • Заставить VM instance имперсонировать service account:

      "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_accountfalsetrueУказывает, использовать ли напрямую service account, привязанный к вашему Compute Engine.
      gcp.gcs.impersonation_service_account"""hello"Service account, который вы хотите имперсонировать.
    • Заставить service account (временно названный meta service account) имперсонировать другой service account (временно названный data service account):

      "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-файле, созданном при создании meta service account.
      gcp.gcs.service_account_private_key_id"""61d257bd8479547cb3e04f0b9b6b9ca07af3b7ea"ID private key в JSON-файле, созданном при создании meta service account.
      gcp.gcs.service_account_private_key"""-----BEGIN PRIVATE KEY----xxxx-----END PRIVATE KEY-----\n"Private key в JSON-файле, созданном при создании meta service account.
      gcp.gcs.impersonation_service_account"""hello"Data service account, который вы хотите имперсонировать.

MetadataUpdateParams

Набор параметров о том, как Selena обновляет кэшированные метаданные Hudi. Этот набор параметров необязателен.

Selena реализует политику автоматического асинхронного обновления по умолчанию.

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

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

ПРИМЕЧАНИЕ

В большинстве случаев, если ваши данные Hudi обновляются с детализацией 1 час или меньше, частота обновления данных считается высокой.

ПараметрОбязательныйОписание
enable_metastore_cacheНетУказывает, кэширует ли Selena метаданные таблиц Hudi. Допустимые значения: true и false. Значение по умолчанию: true. Значение true включает кэш, а значение false отключает кэш.
enable_remote_file_cacheНетУказывает, кэширует ли Selena метаданные базовых файлов данных таблиц или partitions Hudi. Допустимые значения: true и false. Значение по умолчанию: true. Значение true включает кэш, а значение false отключает кэш.
metastore_cache_refresh_interval_secНетИнтервал времени, с которым Selena асинхронно обновляет метаданные таблиц или partitions Hudi, кэшированные в себе. Единица измерения: секунды. Значение по умолчанию: 7200, что составляет 2 часа.
remote_file_cache_refresh_interval_secНетИнтервал времени, с которым Selena асинхронно обновляет метаданные базовых файлов данных таблиц или partitions Hudi, кэшированные в себе. Единица измерения: секунды. Значение по умолчанию: 60.
metastore_cache_ttl_secНетИнтервал времени, с которым Selena автоматически отбрасывает метаданные таблиц или partitions Hudi, кэшированные в себе. Единица измерения: секунды. Значение по умолчанию: 86400, что составляет 24 часа.
remote_file_cache_ttl_secНетИнтервал времени, с которым Selena автоматически отбрасывает метаданные базовых файлов данных таблиц или partitions Hudi, кэшированные в себе. Единица измерения: секунды. Значение по умолчанию: 129600, что составляет 36 часов.

Примеры

Следующие примеры создают Hudi catalog с именем hudi_catalog_hms или hudi_catalog_glue, в зависимости от типа metastore, который вы используете, для запроса данных из вашего Hudi cluster.

HDFS

Если вы используете HDFS в качестве хранилища, выполните команду, подобную приведенной ниже:

CREATE EXTERNAL CATALOG hudi_catalog_hms
PROPERTIES
(
"type" = "hudi",
"hive.metastore.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083"
);

AWS S3

Если вы выбираете учетные данные на основе instance profile
  • Если вы используете Hive metastore в вашем Hudi cluster, выполните команду, подобную приведенной ниже:

    CREATE EXTERNAL CATALOG hudi_catalog_hms
    PROPERTIES
    (
    "type" = "hudi",
    "hive.metastore.type" = "hive",
    "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
    "aws.s3.use_instance_profile" = "true",
    "aws.s3.region" = "us-west-2"
    );
  • Если вы используете AWS Glue в вашем Amazon EMR Hudi cluster, выполните команду, подобную приведенной ниже:

    CREATE EXTERNAL CATALOG hudi_catalog_glue
    PROPERTIES
    (
    "type" = "hudi",
    "hive.metastore.type" = "glue",
    "aws.glue.use_instance_profile" = "true",
    "aws.glue.region" = "us-west-2",
    "aws.s3.use_instance_profile" = "true",
    "aws.s3.region" = "us-west-2"
    );
Если вы выбираете учетные данные на основе assumed role
  • Если вы используете Hive metastore в вашем Hudi cluster, выполните команду, подобную приведенной ниже:

    CREATE EXTERNAL CATALOG hudi_catalog_hms
    PROPERTIES
    (
    "type" = "hudi",
    "hive.metastore.type" = "hive",
    "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
    "aws.s3.use_instance_profile" = "true",
    "aws.s3.iam_role_arn" = "arn:aws:iam::081976408565:role/test_s3_role",
    "aws.s3.region" = "us-west-2"
    );
  • Если вы используете AWS Glue в вашем Amazon EMR Hudi cluster, выполните команду, подобную приведенной ниже:

    CREATE EXTERNAL CATALOG hudi_catalog_glue
    PROPERTIES
    (
    "type" = "hudi",
    "hive.metastore.type" = "glue",
    "aws.glue.use_instance_profile" = "true",
    "aws.glue.iam_role_arn" = "arn:aws:iam::081976408565:role/test_glue_role",
    "aws.glue.region" = "us-west-2",
    "aws.s3.use_instance_profile" = "true",
    "aws.s3.iam_role_arn" = "arn:aws:iam::081976408565:role/test_s3_role",
    "aws.s3.region" = "us-west-2"
    );
Если вы выбираете учетные данные на основе IAM user
  • Если вы используете Hive metastore в вашем Hudi cluster, выполните команду, подобную приведенной ниже:

    CREATE EXTERNAL CATALOG hudi_catalog_hms
    PROPERTIES
    (
    "type" = "hudi",
    "hive.metastore.type" = "hive",
    "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
    "aws.s3.use_instance_profile" = "false",
    "aws.s3.access_key" = "<iam_user_access_key>",
    "aws.s3.secret_key" = "<iam_user_access_key>",
    "aws.s3.region" = "us-west-2"
    );
  • Если вы используете AWS Glue в вашем Amazon EMR Hudi cluster, выполните команду, подобную приведенной ниже:

    CREATE EXTERNAL CATALOG hudi_catalog_glue
    PROPERTIES
    (
    "type" = "hudi",
    "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" = "us-west-2",
    "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" = "us-west-2"
    );

S3-совместимая система хранения

Используйте MinIO в качестве примера. Выполните команду, подобную приведенной ниже:

CREATE EXTERNAL CATALOG hudi_catalog_hms
PROPERTIES
(
"type" = "hudi",
"hive.metastore.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"aws.s3.enable_ssl" = "true",
"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>"
);

Microsoft Azure Storage

Azure Blob Storage
  • Если вы выберете метод аутентификации Shared Key, выполните команду, подобную приведенной ниже:

    CREATE EXTERNAL CATALOG hudi_catalog_hms
    PROPERTIES
    (
    "type" = "hudi",
    "hive.metastore.type" = "hive",
    "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
    "azure.blob.storage_account" = "<blob_storage_account_name>",
    "azure.blob.shared_key" = "<blob_storage_account_shared_key>"
    );
  • Если вы выберете метод аутентификации SAS Token, выполните команду, подобную приведенной ниже:

    CREATE EXTERNAL CATALOG hudi_catalog_hms
    PROPERTIES
    (
    "type" = "hudi",
    "hive.metastore.type" = "hive",
    "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
    "azure.blob.storage_account" = "<blob_storage_account_name>",
    "azure.blob.container" = "<blob_container_name>",
    "azure.blob.sas_token" = "<blob_storage_account_SAS_token>"
    );
Azure Data Lake Storage Gen1
  • Если вы выберете метод аутентификации Managed Service Identity, выполните команду, подобную приведенной ниже:

    CREATE EXTERNAL CATALOG hudi_catalog_hms
    PROPERTIES
    (
    "type" = "hudi",
    "hive.metastore.type" = "hive",
    "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
    "azure.adls1.use_managed_service_identity" = "true"
    );
  • Если вы выберете метод аутентификации Service Principal, выполните команду, подобную приведенной ниже:

    CREATE EXTERNAL CATALOG hudi_catalog_hms
    PROPERTIES
    (
    "type" = "hudi",
    "hive.metastore.type" = "hive",
    "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
    "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>"
    );
Azure Data Lake Storage Gen2
  • Если вы выберете метод аутентификации Managed Identity, выполните команду, подобную приведенной ниже:

    CREATE EXTERNAL CATALOG hudi_catalog_hms
    PROPERTIES
    (
    "type" = "hudi",
    "hive.metastore.type" = "hive",
    "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
    "azure.adls2.oauth2_use_managed_identity" = "true",
    "azure.adls2.oauth2_tenant_id" = "<service_principal_tenant_id>",
    "azure.adls2.oauth2_client_id" = "<service_client_id>"
    );
  • Если вы выберете метод аутентификации Shared Key, выполните команду, подобную приведенной ниже:

    CREATE EXTERNAL CATALOG hudi_catalog_hms
    PROPERTIES
    (
    "type" = "hudi",
    "hive.metastore.type" = "hive",
    "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
    "azure.adls2.storage_account" = "<storage_account_name>",
    "azure.adls2.shared_key" = "<shared_key>"
    );
  • Если вы выберете метод аутентификации Service Principal, выполните команду, подобную приведенной ниже:

    CREATE EXTERNAL CATALOG hudi_catalog_hms
    PROPERTIES
    (
    "type" = "hudi",
    "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
    "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>"
    );

Google GCS

  • Если вы выберете метод аутентификации на основе VM, выполните команду, подобную приведенной ниже:

    CREATE EXTERNAL CATALOG hudi_catalog_hms
    PROPERTIES
    (
    "type" = "hudi",
    "hive.metastore.type" = "hive",
    "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
    "gcp.gcs.use_compute_engine_service_account" = "true"
    );
  • Если вы выберете метод аутентификации на основе service account, выполните команду, подобную приведенной ниже:

    CREATE EXTERNAL CATALOG hudi_catalog_hms
    PROPERTIES
    (
    "type" = "hudi",
    "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
    "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>"
    );
  • Если вы выберете метод аутентификации на основе impersonation:

    • Если вы заставляете VM instance имперсонировать service account, выполните команду, подобную приведенной ниже:

      CREATE EXTERNAL CATALOG hudi_catalog_hms
      PROPERTIES
      (
      "type" = "hudi",
      "hive.metastore.type" = "hive",
      "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
      "gcp.gcs.use_compute_engine_service_account" = "true",
      "gcp.gcs.impersonation_service_account" = "<assumed_google_service_account_email>"
      );
    • Если вы заставляете service account имперсонировать другой service account, выполните команду, подобную приведенной ниже:

      CREATE EXTERNAL CATALOG hudi_catalog_hms
      PROPERTIES
      (
      "type" = "hudi",
      "hive.metastore.type" = "hive",
      "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
      "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>"
      );

Просмотр Hudi catalogs

Вы можете использовать SHOW CATALOGS для запроса всех catalogs в текущем Selena cluster:

SHOW CATALOGS;

Вы также можете использовать SHOW CREATE CATALOG для запроса инструкции создания external catalog. Следующий пример запрашивает инструкцию создания Hudi catalog с именем hudi_catalog_glue:

SHOW CREATE CATALOG hudi_catalog_glue;

Переключение на Hudi Catalog и базу данных в нем

Вы можете использовать один из следующих методов для переключения на Hudi catalog и базу данных в нем:

  • Используйте SET CATALOG для указания Hudi catalog в текущей сессии, а затем используйте USE для указания активной базы данных:

    -- Переключитесь на указанный catalog в текущей сессии:
    SET CATALOG <catalog_name>
    -- Укажите активную базу данных в текущей сессии:
    USE <db_name>
  • Непосредственно используйте USE для переключения на Hudi catalog и базу данных в нем:

    USE <catalog_name>.<db_name>

Удаление Hudi catalog

Вы можете использовать DROP CATALOG для удаления external catalog.

Следующий пример удаляет Hudi catalog с именем hudi_catalog_glue:

DROP Catalog hudi_catalog_glue;

Просмотр схемы таблицы Hudi

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

  • Просмотр схемы

    DESC[RIBE] <catalog_name>.<database_name>.<table_name>
  • Просмотр схемы и расположения из инструкции CREATE

    SHOW CREATE TABLE <catalog_name>.<database_name>.<table_name>

Запрос таблицы Hudi

  1. Используйте SHOW DATABASES для просмотра баз данных в вашем Hudi cluster:

    SHOW DATABASES FROM <catalog_name>
  2. Переключитесь на Hudi Catalog и базу данных в нем.

  3. Используйте SELECT для запроса целевой таблицы в указанной базе данных:

    SELECT count(*) FROM <table_name> LIMIT 10

Загрузка данных из Hudi

Предположим, у вас есть OLAP-таблица с именем olap_tbl, вы можете преобразовать и загрузить данные следующим образом:

INSERT INTO default_catalog.olap_db.olap_tbl SELECT * FROM hudi_table

Ручное или автоматическое обновление кэша метаданных

Ручное обновление

По умолчанию Selena кэширует метаданные Hudi и автоматически обновляет метаданные в асинхронном режиме для повышения производительности. Кроме того, после внесения некоторых изменений схемы или обновлений таблицы в таблицу Hudi, вы также можете использовать REFRESH EXTERNAL TABLE для ручного обновления ее метаданных, тем самым гарантируя, что Selena сможет получить актуальные метаданные при первой возможности и сгенерировать соответствующие планы выполнения:

REFRESH EXTERNAL TABLE <table_name> [PARTITION ('partition_name', ...)]

Приложение: Понимание автоматического асинхронного обновления метаданных

Автоматическое асинхронное обновление - это политика по умолчанию, которую Selena использует для обновления метаданных в Hudi catalogs.

По умолчанию (а именно, когда параметры enable_metastore_cache и enable_remote_file_cache оба установлены в true), если запрос попадает в partition таблицы Hudi, Selena автоматически кэширует метаданные partition и метаданные базовых файлов данных partition. Кэшированные метаданные обновляются с использованием политики ленивого обновления.

Например, есть таблица Hudi с именем table2, которая имеет четыре partitions: p1, p2, p3 и p4. Запрос попадает в p1, и Selena кэширует метаданные p1 и метаданные базовых файлов данных p1. Предположим, что интервалы времени по умолчанию для обновления и отбрасывания кэшированных метаданных следующие:

  • Интервал времени (указанный параметром metastore_cache_refresh_interval_sec) для асинхронного обновления кэшированных метаданных p1 составляет 2 часа.
  • Интервал времени (указанный параметром remote_file_cache_refresh_interval_sec) для асинхронного обновления кэшированных метаданных базовых файлов данных p1 составляет 60 секунд.
  • Интервал времени (указанный параметром metastore_cache_ttl_sec) для автоматического отбрасывания кэшированных метаданных p1 составляет 24 часа.
  • Интервал времени (указанный параметром remote_file_cache_ttl_sec) для автоматического отбрасывания кэшированных метаданных базовых файлов данных p1 составляет 36 часов.

На следующем рисунке показаны интервалы времени на временной шкале для более легкого понимания.

Timeline for updating and discarding cached metadata

Затем Selena обновляет или отбрасывает метаданные в соответствии со следующими правилами:

  • Если другой запрос снова попадает в p1 и текущее время с момента последнего обновления составляет менее 60 секунд, Selena не обновляет кэшированные метаданные p1 или кэшированные метаданные базовых файлов данных p1.
  • Если другой запрос снова попадает в p1 и текущее время с момента последнего обновления составляет более 60 секунд, Selena обновляет кэшированные метаданные базовых файлов данных p1.
  • Если другой запрос снова попадает в p1 и текущее время с момента последнего обновления составляет более 2 часов, Selena обновляет кэшированные метаданные p1.
  • Если к p1 не было доступа в течение 24 часов с момента последнего обновления, Selena отбрасывает кэшированные метаданные p1. Метаданные будут кэшированы при следующем запросе.
  • Если к p1 не было доступа в течение 36 часов с момента последнего обновления, Selena отбрасывает кэшированные метаданные базовых файлов данных p1. Метаданные будут кэшированы при следующем запросе.