Поделиться через


Подключение к Azure Data Lake Storage и Blob-хранилищу

Примечание.

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

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

Примечание.

Подключение к Azure Data Lake Storage или Blob-хранилищу с использованием учетных данных Azure

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

  • OAuth 2.0 с сервис-аккаунтом Microsoft Entra ID: Databricks рекомендует использовать сервис-аккаунты Microsoft Entra ID для подключения к Azure Data Lake Storage. Чтобы создать учетную запись сервисного принципала Microsoft Entra ID и предоставить ему доступ к учетным записям хранения Azure, см. раздел «Доступ к хранилищу с помощью учетной записи сервисного принципала и Microsoft Entra ID (Azure Active Directory)».

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

    Внимание

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

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

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

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

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

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

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

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

Примечание.

Служебные принципы Microsoft Entra ID также можно использовать для доступа к хранилищу 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")

Заменить

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

Заменить

  • <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>"))

Заменить

  • <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 OAuth 2.0 с записной книжкой субъектов-служб Microsoft Entra ID (ранее — Azure Active Directory)

Возьми записную книжку

Известные проблемы Azure Data Lake Storage

При попытке получить доступ к контейнеру хранилища, созданному через портал 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 в документации Майкрософт.

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

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