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

Аутентификация для доступа к Microsoft Azure Storage

Начиная с версии v1.5.2, Selena может интегрироваться с Microsoft Azure Storage (Azure Blob Storage или Azure Data Lake Storage) в следующих сценариях:

  • Пакетная загрузка данных из Azure Storage.
  • Резервное копирование данных в Azure Storage и восстановление данных из Azure Storage.
  • Запрос файлов Parquet и ORC в Azure Storage.
  • Запрос таблиц Hive, Iceberg, Hudi и Delta Lake в Azure Storage.

Selena поддерживает следующие типы учётных записей Azure Storage:

  • Azure Blob Storage
  • Azure Data Lake Storage Gen1
  • Azure Data Lake Storage Gen2

В этом разделе каталог Hive, файловая внешняя таблица и Broker Load используются в качестве примеров, показывающих, как Selena интегрируется с Azure Storage с использованием этих типов учётных записей Azure Storage. Информацию о параметрах в примерах см. в Каталог Hive, Файловая внешняя таблица и Broker Load.

Blob Storage

Selena поддерживает один из следующих методов аутентификации для доступа к Blob Storage:

  • Shared Key
  • SAS Token

ПРИМЕЧАНИЕ

При загрузке данных или прямом запросе файлов из Blob Storage вы должны использовать протокол wasb или wasbs для доступа к вашим данным:

  • Если ваша учётная запись хранения разрешает доступ по HTTP, используйте протокол wasb и записывайте путь к файлу как wasb://<container>@<storage_account>.blob.core.windows.net/<path>/<file_name>.
  • Если ваша учётная запись хранения разрешает доступ по HTTPS, используйте протокол wasbs и записывайте путь к файлу как wasbs://<container>@<storage_account>.blob.core.windows.net/<path>/<file_name>.

Shared Key

Внешний каталог

Настройте azure.blob.storage_account и azure.blob.shared_key следующим образом в операторе CREATE EXTERNAL CATALOG:

CREATE EXTERNAL CATALOG hive_catalog_azure
PROPERTIES
(
"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>"
);

Файловая внешняя таблица

Настройте azure.blob.storage_account, azure.blob.shared_key и путь к файлу (path) следующим образом в операторе CREATE EXTERNAL TABLE:

CREATE EXTERNAL TABLE external_table_azure
(
id varchar(65500),
attributes map<varchar(100), varchar(2000)>
)
ENGINE=FILE
PROPERTIES
(
"path" = "wasb[s]://<container>@<storage_account>.blob.core.windows.net/<path>/<file_name>",
"format" = "ORC",
"azure.blob.storage_account" = "<blob_storage_account_name>",
"azure.blob.shared_key" = "<blob_storage_account_shared_key>"
);

Broker Load

Настройте azure.blob.storage_account, azure.blob.shared_key и путь к файлу (DATA INFILE) следующим образом в операторе LOAD LABEL:

LOAD LABEL test_db.label000
(
DATA INFILE("wasb[s]://<container>@<storage_account>.blob.core.windows.net/<path>/<file_name>")
INTO TABLE test_ingestion_2
FORMAT AS "parquet"
)
WITH BROKER
(
"azure.blob.storage_account" = "<blob_storage_account_name>",
"azure.blob.shared_key" = "<blob_storage_account_shared_key>"
);

SAS Token

Внешний каталог

Настройте azure.blob.storage_account, azure.blob.container и azure.blob.sas_token следующим образом в операторе CREATE EXTERNAL CATALOG:

CREATE EXTERNAL CATALOG hive_catalog_azure
PROPERTIES
(
"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.blob.storage_account, azure.blob.container, azure.blob.sas_token и путь к файлу (path) следующим образом в операторе CREATE EXTERNAL TABLE:

CREATE EXTERNAL TABLE external_table_azure
(
id varchar(65500),
attributes map<varchar(100), varchar(2000)>
)
ENGINE=FILE
PROPERTIES
(
"path" = "wasb[s]://<container>@<storage_account>.blob.core.windows.net/<path>/<file_name>",
"format" = "ORC",
"azure.blob.storage_account" = "<blob_storage_account_name>",
"azure.blob.container" = "<blob_container_name>",
"azure.blob.sas_token" = "<blob_storage_account_SAS_token>"
);

Broker load

Настройте azure.blob.storage_account, azure.blob.container, azure.blob.sas_token и путь к файлу (DATA INFILE) следующим образом в операторе LOAD LABEL:

LOAD LABEL test_db.label000
(
DATA INFILE("wasb[s]://<container>@<storage_account>.blob.core.windows.net/<path>/<file_name>")
INTO TABLE target_table
FORMAT AS "parquet"
)
WITH BROKER
(
"azure.blob.storage_account" = "<blob_storage_account_name>",
"azure.blob.container" = "<blob_container_name>",
"azure.blob.sas_token" = "<blob_storage_account_SAS_token>"
);

Data Lake Storage Gen1

Selena поддерживает один из следующих методов аутентификации для доступа к Data Lake Storage Gen1:

  • Managed Service Identity
  • Service Principal

ПРИМЕЧАНИЕ

При загрузке данных или запросе файлов из Data Lake Storage Gen1 вы должны использовать протокол adl для доступа к вашим данным и записывать путь к файлу как adl://<data_lake_storage_gen1_name>.azuredatalakestore.net/<path>/<file_name>.

Managed Service Identity

Внешний каталог

Настройте azure.adls1.use_managed_service_identity следующим образом в операторе CREATE EXTERNAL CATALOG:

CREATE EXTERNAL CATALOG hive_catalog_azure
PROPERTIES
(
"type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"azure.adls1.use_managed_service_identity" = "true"
);

Файловая внешняя таблица

Настройте azure.adls1.use_managed_service_identity и путь к файлу (path) следующим образом в операторе CREATE EXTERNAL TABLE:

CREATE EXTERNAL TABLE external_table_azure
(
id varchar(65500),
attributes map<varchar(100), varchar(2000)>
)
ENGINE=FILE
PROPERTIES
(
"path" = "adl://<data_lake_storage_gen1_name>.azuredatalakestore.net/<path>/<file_name>",
"format" = "ORC",
"azure.adls1.use_managed_service_identity" = "true"
);

Broker Load

Настройте azure.adls1.use_managed_service_identity и путь к файлу (DATA INFILE) следующим образом в операторе LOAD LABEL:

LOAD LABEL test_db.label000
(
DATA INFILE("adl://<data_lake_storage_gen1_name>.azuredatalakestore.net/<path>/<file_name>")
INTO TABLE target_table
FORMAT AS "parquet"
)
WITH BROKER
(
"azure.adls1.use_managed_service_identity" = "true"
);

Service Principal

Внешний каталог

Настройте azure.adls1.oauth2_client_id, azure.adls1.oauth2_credential и azure.adls1.oauth2_endpoint следующим образом в операторе CREATE EXTERNAL CATALOG:

CREATE EXTERNAL CATALOG hive_catalog_azure
PROPERTIES
(
"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.adls1.oauth2_client_id, azure.adls1.oauth2_credential, azure.adls1.oauth2_endpoint и путь к файлу (path) следующим образом в операторе CREATE EXTERNAL TABLE:

CREATE EXTERNAL TABLE external_table_azure
(
id varchar(65500),
attributes map<varchar(100), varchar(2000)>
)
ENGINE=FILE
PROPERTIES
(
"path" = "adl://<data_lake_storage_gen1_name>.azuredatalakestore.net/<path>/<file_name>",
"format" = "ORC",
"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>"
);

Broker Load

Настройте azure.adls1.oauth2_client_id, azure.adls1.oauth2_credential, azure.adls1.oauth2_endpoint и путь к файлу (DATA INFILE) следующим образом в операторе LOAD LABEL:

LOAD LABEL test_db.label000
(
DATA INFILE("adl://<data_lake_storage_gen1_name>.azuredatalakestore.net/<path>/<file_name>")
INTO TABLE target_table
FORMAT AS "parquet"
)
WITH BROKER
(
"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>"
);

Data Lake Storage Gen2

Selena поддерживает один из следующих методов аутентификации для доступа к Data Lake Storage Gen2:

  • Managed Identity
  • Shared Key
  • Service Principal

ПРИМЕЧАНИЕ

При загрузке данных или запросе файлов из Data Lake Storage Gen2 вы должны использовать протокол abfs или abfss для доступа к вашим данным:

  • Если ваша учётная запись хранения разрешает доступ по HTTP, используйте протокол abfs и записывайте путь к файлу как abfs://<container>@<storage_account>.dfs.core.windows.net/<path>/<file_name>.
  • Если ваша учётная запись хранения разрешает доступ по HTTPS, используйте протокол abfss и записывайте путь к файлу как abfss://<container>@<storage_account>.dfs.core.windows.net/<path>/<file_name>.

Managed Identity

Перед началом работы необходимо выполнить следующие подготовительные действия:

  • Отредактируйте виртуальные машины (VM), на которых развёрнут ваш cluster Selena.
  • Добавьте управляемые идентификаторы к этим VM.
  • Убедитесь, что управляемые идентификаторы связаны с ролью (Storage Blob Data Reader), авторизованной для чтения данных в вашей учётной записи хранения.

Внешний каталог

Настройте azure.adls2.oauth2_use_managed_identity, azure.adls2.oauth2_tenant_id и azure.adls2.oauth2_client_id следующим образом в операторе CREATE EXTERNAL CATALOG:

CREATE EXTERNAL CATALOG hive_catalog_azure
PROPERTIES
(
"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>"
);

Файловая внешняя таблица

Настройте azure.adls2.oauth2_use_managed_identity, azure.adls2.oauth2_tenant_id, azure.adls2.oauth2_client_id и путь к файлу (path) следующим образом в операторе CREATE EXTERNAL TABLE:

CREATE EXTERNAL TABLE external_table_azure
(
id varchar(65500),
attributes map<varchar(100), varchar(2000)>
)
ENGINE=FILE
PROPERTIES
(
"path" = "abfs[s]://<container>@<storage_account>.dfs.core.windows.net/<path>/<file_name>",
"format" = "ORC",
"azure.adls2.oauth2_use_managed_identity" = "true",
"azure.adls2.oauth2_tenant_id" = "<service_principal_tenant_id>",
"azure.adls2.oauth2_client_id" = "<service_client_id>"
);

Broker Load

Настройте azure.adls2.oauth2_use_managed_identity, azure.adls2.oauth2_tenant_id, azure.adls2.oauth2_client_id и путь к файлу (DATA INFILE) следующим образом в операторе LOAD LABEL:

LOAD LABEL test_db.label000
(
DATA INFILE("adfs[s]://<container>@<storage_account>.dfs.core.windows.net/<path>/<file_name>")
INTO TABLE target_table
FORMAT AS "parquet"
)
WITH BROKER
(
"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

Внешний каталог

Настройте azure.adls2.storage_account и azure.adls2.shared_key следующим образом в операторе CREATE EXTERNAL CATALOG:

CREATE EXTERNAL CATALOG hive_catalog_azure
PROPERTIES
(
"type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"azure.adls2.storage_account" = "<storage_account_name>",
"azure.adls2.shared_key" = "<shared_key>"
);

Файловая внешняя таблица

Настройте azure.adls2.storage_account, azure.adls2.shared_key и путь к файлу (path) следующим образом в операторе CREATE EXTERNAL TABLE:

CREATE EXTERNAL TABLE external_table_azure
(
id varchar(65500),
attributes map<varchar(100), varchar(2000)>
)
ENGINE=FILE
PROPERTIES
(
"path" = "abfs[s]://<container>@<storage_account>.dfs.core.windows.net/<path>/<file_name>",
"format" = "ORC",
"azure.adls2.storage_account" = "<storage_account_name>",
"azure.adls2.shared_key" = "<shared_key>"
);

Broker Load

Настройте azure.adls2.storage_account, azure.adls2.shared_key и путь к файлу (DATA INFILE) следующим образом в операторе LOAD LABEL:

LOAD LABEL test_db.label000
(
DATA INFILE("adfs[s]://<container>@<storage_account>.dfs.core.windows.net/<path>/<file_name>")
INTO TABLE target_table
FORMAT AS "parquet"
)
WITH BROKER
(
"azure.adls2.storage_account" = "<storage_account_name>",
"azure.adls2.shared_key" = "<shared_key>"
);

Service Principal

Перед началом работы необходимо создать субъект-службу, создать назначение роли для назначения роли субъекту-службе, а затем добавить назначение роли к вашей учётной записи хранения. Таким образом, вы можете убедиться, что этот субъект-служба может успешно получить доступ к данным в вашей учётной записи хранения.

Внешний каталог

Настройте azure.adls2.oauth2_client_id, azure.adls2.oauth2_client_secret и azure.adls2.oauth2_client_endpoint следующим образом в операторе CREATE EXTERNAL CATALOG:

CREATE EXTERNAL CATALOG hive_catalog_azure
PROPERTIES
(
"type" = "hive",
"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>"
);

Файловая внешняя таблица

Настройте azure.adls2.oauth2_client_id, azure.adls2.oauth2_client_secret, azure.adls2.oauth2_client_endpoint и путь к файлу (path) следующим образом в операторе CREATE EXTERNAL TABLE:

CREATE EXTERNAL TABLE external_table_azure
(
id varchar(65500),
attributes map<varchar(100), varchar(2000)>
)
ENGINE=FILE
PROPERTIES
(
"path" = "abfs[s]://<container>@<storage_account>.dfs.core.windows.net/<path>/<file_name>",
"format" = "ORC",
"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>"
);

Broker Load

Настройте azure.adls2.oauth2_client_id, azure.adls2.oauth2_client_secret, azure.adls2.oauth2_client_endpoint и путь к файлу (DATA INFILE) следующим образом в операторе LOAD LABEL:

LOAD LABEL test_db.label000
(
DATA INFILE("adfs[s]://<container>@<storage_account>.dfs.core.windows.net/<path>/<file_name>")
INTO TABLE target_table
FORMAT AS "parquet"
)
WITH BROKER
(
"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>"
);