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


Подключение к Хранилищу BLOB-объектов Azure с использованием WASB (устаревшее решение)

Корпорация Майкрософт не рекомендует драйвер BLOB-объектов Windows служба хранилища Azure (WASB) для Хранилище BLOB-объектов Azure в пользу драйвера файловой системы BLOB-объектов Azure (ABFS); см. статью "Подключение к Azure Data Lake Storage 2-го поколения и хранилищу BLOB-объектов". ABFS имеет множество преимуществ по сравнению с WASB. См. документацию Azure по ABFS.

В этой статье содержится документация по поддержке кода, использующего драйвер WASB. Databricks рекомендует использовать ABFS для всех connections в Azure Blob Storage.

Настройка WASB credentials в Databricks

Драйвер WASB позволяет использовать ключ доступа к учетной записи хранения или подписанный URL-адрес (SAS). (Если вы считываете данные из общедоступной учетной записи хранения, вам не нужно настраивать credentials).

Databricks рекомендует использовать секреты всякий раз, когда нужно передать credentials в Azure Databricks. Секреты могут использовать все пользователи, у которых есть доступ к области, содержащей секреты.

Вы можете передать credentials:

  • в области действия кластера в конфигурации Spark;
  • в области действия записной книжки;
  • с присоединением к подключенному каталогу.

Databricks рекомендует обновить все ваши connections до и использовать ABFS для доступа к Azure Blob Storage, который обеспечивает аналогичные шаблоны доступа, как и WASB. ABFS обеспечивает оптимальный уровень безопасности и производительности при взаимодействии с Хранилищем BLOB-объектов Azure.

Чтобы настроить конфигурационные свойства Spark при создании кластера, , . Credentials set на уровне кластера доступны всем пользователям с доступом к такому кластеру.

Чтобы настроить credentialsв области записной книжки, используйте spark.conf.set(). Credentials, передаваемые на уровне ноутбука, доступны всем пользователям с доступом к этому ноутбуку.

Настройка credentials хранилища BLOB-объектов Azure с помощью ключа доступа к учетной записи хранения

Ключ доступа к учетной записи хранения предоставляет полный доступ ко всем контейнерам в учетной записи хранения. Хотя этот шаблон полезен для создания прототипов, не используйте его в рабочей среде, чтобы снизить риски, связанные с предоставлением неограниченного доступа к рабочим данным.

spark.conf.set(
  "fs.azure.account.key.<storage-account-name>.blob.core.windows.net",
  "<storage-account-access-key>"
)

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

Настройка хранилища BLOB-объектов Azure credentials с помощью подписанного ключа доступа (SAS)

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

spark.conf.set(
  "fs.azure.sas.<container-name>.<storage-account-name>.blob.core.windows.net",
  "<sas-token-for-container>"
)

Доступ к Хранилищу BLOB-объектов Azure с помощью API кадров данных

API DataFrame Apache Spark может использовать credentials, настроенные как на уровне записной книжки, так и на уровне кластера. Во всех URI драйвера WASB указаны имена контейнеров и учетных записей хранения. Имя каталога является необязательным. В нем может быть указано несколько вложенных каталогов относительно контейнера.

wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/<directory-name>

В следующих примерах кода показано, как использовать api DataFrames и databricks Utilities (dbutils) для взаимодействия с именованным каталогом в контейнере.

df = spark.read.format("parquet").load("wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/<directory-name>")

dbutils.fs.ls("wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/<directory-name>")

Чтобы использовать update ABFS вместо WASB, update ваши URI. Дополнительные сведения см. в статье "Доступ к хранилищу Azure"

Доступ к Хранилищу BLOB-объектов с помощью T-SQL

Credentials set в конфигурации сеанса записной книжки недоступны для записных книжек под управлением Spark SQL.

После set ключа доступа к учетной записи или SAS в конфигурации кластера можно использовать стандартные запросы SQL Spark с хранилищем BLOB-объектов Azure:

-- SQL
CREATE DATABASE <db-name>
LOCATION "wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/";

Чтобы использовать update ABFS вместо WASB для ваших update URI, см. доступ к службе хранения Azure

Подключение контейнеров Хранилища BLOB-объектов Azure к DBFS

Контейнер Хранилища BLOB-объектов Azure или папку внутри контейнера можно подключить к DBFS. Рекомендации по Databricks см. в статье Подключение облачного хранилища объектов в Azure Databricks.

Внимание

  • Хранилище BLOB-объектов Azure поддерживает три типа BLOB-объектов: блочные, добавочные и страничные. Вы можете подключать блочные BLOB-объекты только к DBFS.
  • Все пользователи имеют доступ на чтение и запись к объектам в контейнерах Хранилища BLOB-объектов, подключенных к DBFS.
  • После создания точки подключения с помощью кластера пользователи такого кластера смогут немедленно получить доступ к точке подключения. Чтобы использовать точку подключения в другом работающем кластере, необходимо в этом работающем кластере выполнить dbutils.fs.refreshMounts(), чтобы сделать созданную точку подключения доступной.

В DBFS используются учетные данные, предоставляемые при создании точки подключения для доступа к подключенному контейнеру хранилища BLOB-объектов. Если контейнер хранилища BLOB-объектов подключен с помощью ключа доступа к учетной записи хранения, в DBFS используются временные маркеры SAS, полученные из ключа учетной записи хранения при получении доступа к этой точке подключения.

Подключение контейнера хранилища BLOB-объектов Azure

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

  1. Чтобы подключить контейнер хранилища BLOB-объектов или папку внутри контейнера, используйте следующую команду:

    Python

    dbutils.fs.mount(
      source = "wasbs://<container-name>@<storage-account-name>.blob.core.windows.net",
      mount_point = "/mnt/<mount-name>",
      extra_configs = {"<conf-key>":dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")})
    

    Scala

    dbutils.fs.mount(
      source = "wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/<directory-name>",
      mountPoint = "/mnt/<mount-name>",
      extraConfigs = Map("<conf-key>" -> dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")))
    

    where

    • <storage-account-name> — это имя учетной записи хранилища BLOB-объектов Azure.
    • <container-name> — это имя контейнера в учетной записи хранилища BLOB-объектов Azure.
    • <mount-name> — это путь в DBFS, представляющий where контейнер хранилища BLOB-объектов или папку внутри контейнера, указанного в source, которая будет смонтирована в DBFS.
    • <conf-key> может быть либо fs.azure.account.key.<storage-account-name>.blob.core.windows.net, либо fs.azure.sas.<container-name>.<storage-account-name>.blob.core.windows.net
    • dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>") получает ключ, сохраненный в качестве секрета в секретной области.
  2. Доступ к файлам в контейнере осуществляется так же, как к локальным файлам, например:

    Python

    # python
    df = spark.read.format("text").load("/mnt/<mount-name>/...")
    df = spark.read.format("text").load("dbfs:/<mount-name>/...")
    

    Scala

    // scala
    val df = spark.read.format("text").load("/mnt/<mount-name>/...")
    val df = spark.read.format("text").load("dbfs:/<mount-name>/...")
    

    SQL

    -- SQL
    CREATE DATABASE <db-name>
    LOCATION "/mnt/<mount-name>"