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


Подключение облачного хранилища объектов в Azure Databricks

Внимание

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

Azure Databricks позволяет пользователям подключить облачное хранилище объектов к файловой системе Databricks (DBFS), чтобы упростить доступ к данным для пользователей, незнакомых с облачными понятиями. Подключенные данные не работают с каталогом Unity, и Databricks рекомендует перейти от использования подключений и вместо этого управлять управлением данными с помощью каталога Unity.

Как Azure Databricks подключает облачное хранилище объектов?

Подключения Azure Databricks создают связь между рабочей областью и облачным хранилищем объектов, что позволяет взаимодействовать с облачным хранилищем объектов через знакомые пути к файлам (относительно файловой системы Databricks). Подключения работают путем создания локального псевдонима в каталоге /mnt, в котором хранятся следующие сведения:

  • Расположение облачного хранилища объектов.
  • Спецификации драйвера для подключения к учетной записи хранения или контейнеру.
  • Учетные данные безопасности, необходимые для доступа к данным.

Какой синтаксис используется для подключения хранилища?

source указывает универсальный код ресурса (URI) хранилища объектов (и при необходимости может кодировать учетные данные безопасности). mount_point указывает локальный путь в каталоге /mnt. Некоторые источники хранилища объектов поддерживают необязательный encryption_type аргумент. Для некоторых шаблонов доступа можно передать дополнительные спецификации конфигурации в качестве словаря extra_configs.

Примечание.

Databricks рекомендует настроить конфигурацию Spark и Hadoop для конкретного подключения в качестве параметров.extra_configs Это гарантирует, что конфигурации привязаны к подключению, а не к кластеру или сеансу.

dbutils.fs.mount(
  source: str,
  mount_point: str,
  encryption_type: Optional[str] = "",
  extra_configs: Optional[dict[str:str]] = None
)

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

Примечание.

Помимо подходов, описанных в этой статье, можно автоматизировать подключение контейнера с помощью поставщика Databricks Terraform и databricks_mount.

Отключение точки подключения

Чтобы отключить точку подключения, используйте следующую команду:

dbutils.fs.unmount("/mnt/<mount-name>")

Предупреждение

Чтобы избежать ошибок, никогда не изменяйте точку подключения во время чтения или записи в нее других заданий. После изменения подключения всегда запустите dbutils.fs.refreshMounts() все остальные запущенные кластеры для распространения обновлений подключения. См. команду refreshMounts (dbutils.fs.refreshMounts).

Подключение ADLS 2-го поколения или Хранилища BLOB-объектов с помощью ABFS

Вы можете подключить данные в учетной записи хранения Azure с помощью субъекта-службы приложений идентификатора Microsoft Entra для проверки подлинности. Дополнительные сведения см. в разделе "Доступ к хранилищу" с помощью субъекта-службы и идентификатора Microsoft Entra (Azure Active Directory).

Внимание

  • Все пользователи в рабочей области Azure Databricks имеют доступ к подключенной учетной записи ADLS 2-го поколения. Субъекту-службе, используемой для доступа к учетной записи ADLS 2-го поколения, должен быть предоставлен доступ только к этой учетной записи ADLS 2-го поколения; у нее не должно быть доступа к другим ресурсам Azure.
  • При создании точки подключения с помощью кластера пользователи кластера могут немедленно получить доступ к точке подключения. Чтобы использовать точку подключения в другом работающем кластере, необходимо в этом работающем кластере выполнить dbutils.fs.refreshMounts(), чтобы сделать созданную точку подключения доступной.
  • Отключение точки подключения во время выполнения заданий может привести к ошибкам. Убедитесь, что рабочие задания не отключают хранилище в процессе обработки.
  • Точки подключения, использующие секреты, не обновляются автоматически. Если в подключенном хранилище используется секрет, который периодически обновляется, истекает или удаляется, могут возникать ошибки, например 401 Unauthorized. Чтобы устранить такую ошибку, необходимо отключить и повторно подключить хранилище.
  • Иерархическое пространство имен (HNS) должно быть включено для успешного подключения учетной записи хранения Azure Data Lake Storage 2-го поколения с помощью конечной точки ABFS.

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

configs = {"fs.azure.account.auth.type": "OAuth",
          "fs.azure.account.oauth.provider.type": "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
          "fs.azure.account.oauth2.client.id": "<application-id>",
          "fs.azure.account.oauth2.client.secret": dbutils.secrets.get(scope="<scope-name>",key="<service-credential-key-name>"),
          "fs.azure.account.oauth2.client.endpoint": "https://login.microsoftonline.com/<directory-id>/oauth2/token"}

# Optionally, you can add <directory-name> to the source URI of your mount point.
dbutils.fs.mount(
  source = "abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/",
  mount_point = "/mnt/<mount-name>",
  extra_configs = configs)
val configs = Map(
  "fs.azure.account.auth.type" -> "OAuth",
  "fs.azure.account.oauth.provider.type" -> "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
  "fs.azure.account.oauth2.client.id" -> "<application-id>",
  "fs.azure.account.oauth2.client.secret" -> dbutils.secrets.get(scope="<scope-name>",key="<service-credential-key-name>"),
  "fs.azure.account.oauth2.client.endpoint" -> "https://login.microsoftonline.com/<directory-id>/oauth2/token")
// Optionally, you can add <directory-name> to the source URI of your mount point.
dbutils.fs.mount(
  source = "abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/",
  mountPoint = "/mnt/<mount-name>",
  extraConfigs = configs)

Replace

  • <application-id> на идентификатор приложения (клиента) для приложения Azure Active Directory.
  • <scope-name> на имя области секретов Databricks.
  • <service-credential-key-name> на имя ключа с секретом клиента.
  • <directory-id> на идентификатор каталога (клиента) для приложения Azure Active Directory.
  • <container-name> на имя контейнера в учетной записи хранения ADLS 2-го поколения.
  • <storage-account-name> на имя учетной записи хранения ADLS 2-го поколения.
  • <mount-name> на имя предполагаемой точки подключения в DBFS.