Подключение к 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.
Примечание.
- Устаревший драйвер Windows Azure Storage Blob (WASB) объявлен нерекомендуемым. ABFS имеет множество преимуществ по сравнению с WASB. См. документацию Azure по ABFS. Документацию по работе с устаревшим драйвером WASB см. в статье Подключение к Хранилищу BLOB-объектов Azure с использованием WASB (устаревшее решение).
- В Azure объявлено о прекращении поддержки Azure Data Lake Storage 1-го поколения. Azure Databricks рекомендует перенести все данные из Azure Data Lake Storage 1-го поколения в Azure Data Lake Storage 2-го поколения. Если вы еще не выполнили миграцию, см. статью Доступ к Azure Data Lake Storage 1-го поколения из Azure Databricks.
Подключение к Azure Data Lake Storage 2-го поколения или хранилищу BLOB-объектов с помощью учетных данных Azure
Для доступа к Azure Data Lake Storage 2-го поколения или хранилищу BLOB-объектов можно использовать следующие учетные данные:
OAuth 2.0 с субъектом-службой идентификатора Microsoft Entra ID: Databricks рекомендует использовать субъекты-службы идентификатора Microsoft Entra для подключения к хранилищу Azure. Чтобы создать субъект-службу идентификатора Microsoft Entra и предоставить ему доступ к учетным записям хранения Azure, см. раздел "Доступ к хранилищу с помощью субъекта-службы" и идентификатора Microsoft Entra (Azure Active Directory).<
a1/>. Чтобы создать субъект-службу идентификатора Microsoft Entra, необходимо иметь
Application Administrator
роль илиApplication.ReadWrite.All
разрешение в идентификаторе Microsoft Entra. Для назначения ролей учетной записи хранения необходимо быть владельцем или пользователем с ролью Azure RBAC "Администратор доступа пользователей" в учетной записи хранения.Подписанные 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
Ниже приведены устаревшие шаблоны хранения:
В Databricks больше не рекомендуется подключать внешние расположения данных к файловой системе Databricks. См. раздел Подключение облачного хранилища объектов в Azure Databricks.
Databricks больше не рекомендует выполнять сквозную передачу учетных данных с помощью Azure Data Lake Storage 2-го поколения. См. раздел "Доступ к Azure Data Lake Storage" с помощью сквозного руководства учетных данных Microsoft Entra ID (устаревшая версия).