Подключение к Azure Data Lake Storage 2-го поколения и Хранилище BLOB-объектов Azure

Примечание.

В этой статье описываются устаревшие шаблоны для настройки доступа к Azure Data Lake Storage 2-го поколения. Databricks рекомендует использовать каталог Unity для настройки доступа к Azure Data Lake Storage 2-го поколения и томам для прямого взаимодействия с файлами. См. статью "Подключение к облачному хранилищу объектов и службам с помощью каталога Unity".

В этой статье объясняется, как подключиться к Azure Data Lake Storage 2-го поколения и хранилищу BLOB-объектов из Azure Databricks.

Примечание.

Подключение к Azure Data Lake Storage 2-го поколения или хранилищу BLOB-объектов с помощью учетных данных Azure

Для доступа к Azure Data Lake Storage 2-го поколения или хранилищу BLOB-объектов можно использовать следующие учетные данные:

  • OAuth 2.0 с субъектом-службой идентификатора Microsoft Entra ID: Databricks рекомендует использовать субъекты-службы Идентификатора Майкрософт для подключения к Azure Data Lake Storage 2-го поколения. Чтобы создать субъект-службу идентификатора Microsoft Entra и предоставить ему доступ к учетным записям хранения Azure, см. раздел "Доступ к хранилищу с помощью субъекта-службы" и идентификатора Microsoft Entra (Azure Active Directory).<a1/>.

    Чтобы создать субъект-службу идентификатора Microsoft Entra, необходимо иметь Application Administrator роль или Application.ReadWrite.All разрешение в идентификаторе Microsoft Entra. Для назначения ролей учетной записи хранения необходимо быть владельцем или пользователем с ролью Azure RBAC "Администратор доступа пользователей" в учетной записи хранения.

    Внимание

    Хранилище BLOB-объектов не поддерживает субъекты-службы идентификатора Microsoft Entra.

  • Подписанные URL-адреса (SAS) — маркеры SAS хранилища можно использовать для доступа к хранилищу Azure. С помощью SAS можно ограничить доступ к учетной записи хранения, используя временные маркеры безопасности с детальным контролем доступа.

    Вы можете предоставить только разрешения маркера SAS, которые у вас есть в учетной записи хранения, контейнере или файле самостоятельно.

  • Ключи учетной записи. Ключи доступа к учетной записи хранения можно использовать для управления доступом к служба хранилища Azure. Ключи доступа к учетной записи хранения предоставляют полный доступ к конфигурации учетной записи хранения, а также к данным. Databricks рекомендует использовать субъект-службу идентификатора Microsoft Entra или маркер SAS для подключения к хранилищу Azure вместо ключей учетной записи.

    Чтобы просмотреть ключи доступа учетной записи, необходимо иметь роль "Владелец", "Участник" или "Оператор ключей учетной записи хранения" в учетной записи хранения.

Для хранения всех учетных данных Databricks рекомендует использовать области секретов. Вы можете предоставить пользователям, субъектам-службам и группам в рабочей области доступ для чтения области секрета. Это защищает учетные данные Azure, позволяя пользователям получать доступ к хранилищу Azure. Сведения о создании области секрета см. в разделе "Области секретов".

Настройка свойств Spark для настройки учетных данных Azure для доступа к хранилищу Azure

Свойства Spark можно задать для настройки учетных данных Azure для доступа к хранилищу Azure. Учетные данные могут быть ограничены кластером или записной книжкой. Используйте управление доступом к кластеру и управление доступом к записной книжке вместе для защиты доступа к хранилищу Azure. Ознакомьтесь с разрешениями вычислений и совместной работой с помощью записных книжек Databricks.

Примечание.

Субъекты-службы идентификатора Microsoft Entra также можно использовать для доступа к хранилищу Azure из хранилища SQL, см . сведения о настройке доступа к данным.

Чтобы задать свойства Spark, используйте следующий фрагмент кода в конфигурации Spark кластера или записной книжке:

Субъект-служба Azure

Используйте следующий формат, чтобы задать конфигурацию Кластера Spark:

spark.hadoop.fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net OAuth
spark.hadoop.fs.azure.account.oauth.provider.type.<storage-account>.dfs.core.windows.net org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider
spark.hadoop.fs.azure.account.oauth2.client.id.<storage-account>.dfs.core.windows.net <application-id>
spark.hadoop.fs.azure.account.oauth2.client.secret.<storage-account>.dfs.core.windows.net {{secrets/<secret-scope>/<service-credential-key>}}
spark.hadoop.fs.azure.account.oauth2.client.endpoint.<storage-account>.dfs.core.windows.net https://login.microsoftonline.com/<directory-id>/oauth2/token

В записных книжках можно использовать spark.conf.set , как показано в следующем примере:

service_credential = dbutils.secrets.get(scope="<secret-scope>",key="<service-credential-key>")

spark.conf.set("fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net", "OAuth")
spark.conf.set("fs.azure.account.oauth.provider.type.<storage-account>.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
spark.conf.set("fs.azure.account.oauth2.client.id.<storage-account>.dfs.core.windows.net", "<application-id>")
spark.conf.set("fs.azure.account.oauth2.client.secret.<storage-account>.dfs.core.windows.net", service_credential)
spark.conf.set("fs.azure.account.oauth2.client.endpoint.<storage-account>.dfs.core.windows.net", "https://login.microsoftonline.com/<directory-id>/oauth2/token")

Replace

  • <secret-scope> на имя области секретов Databricks.
  • <service-credential-key> на имя ключа с секретом клиента.
  • <storage-account> именем учетной записи хранения Azure.
  • <application-id>с идентификатором приложения (клиента) для приложения Microsoft Entra ID.
  • <directory-id>с идентификатором каталога (клиента) для приложения Microsoft Entra ID.

Маркеры SAS

Вы можете настроить маркеры SAS для нескольких учетных записей хранения в одном и том же сеансе Spark.

spark.conf.set("fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net", "SAS")
spark.conf.set("fs.azure.sas.token.provider.type.<storage-account>.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.sas.FixedSASTokenProvider")
spark.conf.set("fs.azure.sas.fixed.token.<storage-account>.dfs.core.windows.net", dbutils.secrets.get(scope="<scope>", key="<sas-token-key>"))

Replace

  • <storage-account> именем учетной записи хранения Azure;
  • <scope> на имя секретной области Azure Databricks.
  • <sas-token-key> с именем ключа, содержащего маркер SAS хранилища Azure.

Ключ учетной записи

spark.conf.set(
    "fs.azure.account.key.<storage-account>.dfs.core.windows.net",
    dbutils.secrets.get(scope="<scope>", key="<storage-account-access-key>"))

Replace

  • <storage-account> именем учетной записи хранения Azure;
  • <scope> на имя секретной области Azure Databricks.
  • <storage-account-access-key> на имя ключа, содержащего ключ доступа к учетной записи хранения Azure.

Доступ к хранилищу Azure

После правильной настройки учетных данных для доступа к контейнеру хранилища Azure можно взаимодействовать с ресурсами в учетной записи хранения с помощью URI. Databricks рекомендует использовать драйвер abfss для повышения уровня безопасности.

spark.read.load("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<path-to-data>")

dbutils.fs.ls("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<path-to-data>")
CREATE TABLE <database-name>.<table-name>;

COPY INTO <database-name>.<table-name>
FROM 'abfss://container@storageAccount.dfs.core.windows.net/path/to/folder'
FILEFORMAT = CSV
COPY_OPTIONS ('mergeSchema' = 'true');

Пример записной книжки

ADLS 2-го поколения OAuth 2.0 с записной книжкой microsoft Entra ID (ранее — Azure Active Directory)

Получить записную книжку

известные проблемы Azure Data Lake Storage 2-го поколения

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

StatusCode=404
StatusDescription=The specified filesystem does not exist.
ErrorCode=FilesystemNotFound
ErrorMessage=The specified filesystem does not exist.

Если иерархическое пространство имен включено, вам не нужно создавать контейнеры с помощью портал Azure. Если вы видите эту ошибку, удалите контейнер BLOB-объектов с помощью портала Azure. Через несколько минут можно получить доступ к контейнеру. Кроме того, можно изменить URI abfss, чтобы использовать другой контейнер, если этот контейнер не был создан с помощью портала Azure.

См. Известные проблемы с Azure Data Lake Storage 2-го поколения в документации Microsoft.

Нерекомендуемые шаблоны для хранения и доступа к данным из Azure Databricks

Ниже приведены устаревшие шаблоны хранения: