Подключение к Хранилищу 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 для всех подключений к Хранилищу BLOB-объектов Azure.

Настройка учетных данных WASB в Databricks

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

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

Вы можете передавать учетные данные:

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

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

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

Чтобы настроить учетные данные в области записной книжки, используйте spark.conf.set(). Учетные данные, переданные на уровне записной книжки, могут использовать все пользователи, у которых есть доступ к записной книжке.

Настройка учетных данных Хранилища 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 с помощью подписанного URL-адреса (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 кадров данных Apache Spark может использовать учетные данные, настроенные на уровне записной книжки или кластера. Во всех 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>")

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

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

Учетные данные, настроенные в конфигурации сеанса записной книжки, недоступны для записных книжек, в которых работает Spark SQL.

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

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

Чтобы обновить ABFS вместо WASB, обновите 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>")))
    

    где

    • <storage-account-name> — это имя учетной записи хранилища BLOB-объектов Azure.
    • <container-name> — это имя контейнера в учетной записи хранилища BLOB-объектов Azure.
    • <mount-name> — это путь DBFS для подключения контейнера хранилища 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>"