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

Внимание

Подключения DBFS относятся к устаревшей практике и не рекомендуются компанией Databricks. Новые учетные записи подготавливаются без доступа к этим функциям. Databricks рекомендует использовать внешние местоположения в Unity Catalog.

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 или Blob-хранилища через ABFS

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

Внимание

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

Заменить

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