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