Подключение к Хранилищу 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.
Чтобы подключить контейнер хранилища 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>")
получает ключ, сохраненный в качестве секрета в секретной области.
Доступ к файлам в контейнере осуществляется так же, как к локальным файлам, например:
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>"