Доступ к Azure Data Lake Storage 1-го поколения из Azure Databricks
Корпорация Майкрософт объявила о плановом прекращении использования Azure Data Lake Storage 1-го поколения (прежнее название — Azure Data Lake Store, также известно как ADLS) и рекомендует всем пользователям перейти на Azure Data Lake Storage 2-го поколения. Databricks рекомендует выполнить обновление до Azure Data Lake Storage 2-го поколения для повышения производительности и получения новых функций.
Есть два метода доступа к Azure Data Lake Storage 1-го поколения:
- Передайте учетные данные идентификатора Microsoft Entra, также известные как сквозное руководство.
- Непосредственное использование субъекта-службы.
Автоматический доступ с учетными данными идентификатора Microsoft Entra
Вы можете выполнять автоматическую проверку подлинности в Azure Data Lake Storage 1-го поколения из кластеров Azure Databricks с помощью того же идентификатора Microsoft Entra ID, который вы используете для входа в Azure Databricks. Если вы включите пароль для учетных данных идентификатора Microsoft Entra, команды, выполняемые в этом кластере, смогут считывать и записывать данные в Azure Data Lake Storage 1-го поколения без необходимости настраивать учетные данные субъекта-службы для доступа к хранилищу.
Полные инструкции по настройке и использованию см. в статье Access Azure Data Lake Storage с помощью сквозного руководства учетных данных идентификатора Microsoft Entra (устаревшая версия).
Создание и предоставление разрешений субъекту-службе
Если выбранный метод доступа требует наличия субъекта-службы с соответствующими разрешениями и у его нет, выполните указанные ниже действия.
- Создайте приложение и субъект-службу Microsoft Entra ID (прежнее название — Azure Active Directory), которое может получить доступ к ресурсам. Обратите внимание на следующие свойства:
application-id
: идентификатор, однозначно определяющий клиентское приложение.directory-id
: идентификатор, который однозначно идентифицирует экземпляр идентификатора Microsoft Entra.service-credential
: строка, которую приложение использует для подтверждения идентификации.
- Зарегистрируйте субъект-службу, назначив правильные роли, например участника, для учетной записи Azure Data Lake Storage 1-го поколения.
Доступ напрямую к API Spark с помощью субъекта-службы и OAuth 2.0
Чтобы прочитать данные из учетной записи Azure Data Lake Storage 1-го поколения, можно настроить Spark для использования учетных данных службы с помощью следующего фрагмента в записной книжке:
spark.conf.set("fs.adl.oauth2.access.token.provider.type", "ClientCredential")
spark.conf.set("fs.adl.oauth2.client.id", "<application-id>")
spark.conf.set("fs.adl.oauth2.credential", dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential>"))
spark.conf.set("fs.adl.oauth2.refresh.url", "https://login.microsoftonline.com/<directory-id>/oauth2/token")
где
dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")
извлекает ключ доступа к учетной записи хранения, который сохранен в качестве секрета в области секрета.
После настройки учетных данных для доступа к ресурсам вы можете использовать стандартные API Spark и Databricks. Например:
val df = spark.read.format("parquet").load("adl://<storage-resource>.azuredatalakestore.net/<directory-name>")
dbutils.fs.ls("adl://<storage-resource>.azuredatalakestore.net/<directory-name>")
Azure Data Lake Storage 1-го поколения обеспечивает контроль доступа на уровне каталога, поэтому у субъекта-службы должен быть доступ к каталогам, из которых требуется считывать данные, а также к ресурсу Azure Data Lake Storage 1-го поколения.
Доступ через хранилище метаданных
Для доступа к расположениям adl://
, указанным в хранилище метаданных, необходимо указать параметры конфигурации учетных данных Hadoop в качестве параметров Spark при создании кластера, добавив префикс spark.hadoop.
к соответствующим ключам конфигурации Hadoop, чтобы распространить их в конфигурациях Hadoop, используемых хранилищем метаданных.
spark.hadoop.fs.adl.oauth2.access.token.provider.type ClientCredential
spark.hadoop.fs.adl.oauth2.client.id <application-id>
spark.hadoop.fs.adl.oauth2.credential <service-credential>
spark.hadoop.fs.adl.oauth2.refresh.url https://login.microsoftonline.com/<directory-id>/oauth2/token
Предупреждение
- Эти учетные данные доступны всем пользователям, имеющих доступ к кластеру.
Подключение ресурса или папки Azure Data Lake Storage 1-го поколения
Чтобы подключить ресурс Azure Data Lake Storage 1-го поколения или папку внутри него, используйте следующую команду:
Python
configs = {"fs.adl.oauth2.access.token.provider.type": "ClientCredential",
"fs.adl.oauth2.client.id": "<application-id>",
"fs.adl.oauth2.credential": dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential>"),
"fs.adl.oauth2.refresh.url": "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 = "adl://<storage-resource>.azuredatalakestore.net/<directory-name>",
mount_point = "/mnt/<mount-name>",
extra_configs = configs)
Scala
val configs = Map(
"fs.adl.oauth2.access.token.provider.type" -> "ClientCredential",
"fs.adl.oauth2.client.id" -> "<application-id>",
"fs.adl.oauth2.credential" -> dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential>"),
"fs.adl.oauth2.refresh.url" -> "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 = "adl://<storage-resource>.azuredatalakestore.net/<directory-name>",
mountPoint = "/mnt/<mount-name>",
extraConfigs = configs)
где
<mount-name>
— это путь в DBFS, который представляет место подключения в DBFS учетной записи Azure Data Lake Storage 1-го поколения или папки внутри нее (заданной с помощьюsource
).dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")
извлекает ключ доступа к учетной записи хранения, который сохранен в качестве секрета в области секрета.
Доступ к файлам в контейнере осуществляется так же, как к локальным файлам, например:
Python
df = spark.read.format("text").load("/mnt/<mount-name>/....")
df = spark.read.format("text").load("dbfs:/mnt/<mount-name>/....")
Scala
val df = spark.read.format("text").load("/mnt/<mount-name>/....")
val df = spark.read.format("text").load("dbfs:/mnt/<mount-name>/....")
Настройка учетных данных службы для нескольких учетных записей
Чтобы настроить учетные данные службы для нескольких учетных записей Azure Data Lake Storage 1-го поколения для использования в одном сеансе Apache Spark, добавьте account.<account-name>
в ключи конфигурации. Например, если вы хотите настроить учетные данные для учетных записей с целью одновременного доступа к adl://example1.azuredatalakestore.net
и adl://example2.azuredatalakestore.net
, это можно сделать следующим образом:
spark.conf.set("fs.adl.oauth2.access.token.provider.type", "ClientCredential")
spark.conf.set("fs.adl.account.example1.oauth2.client.id", "<application-id-example1>")
spark.conf.set("fs.adl.account.example1.oauth2.credential", dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential-example1>"))
spark.conf.set("fs.adl.account.example1.oauth2.refresh.url", "https://login.microsoftonline.com/<directory-id-example1>/oauth2/token")
spark.conf.set("fs.adl.account.example2.oauth2.client.id", "<application-id-example2>")
spark.conf.set("fs.adl.account.example2.oauth2.credential", dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential-example2>"))
spark.conf.set("fs.adl.account.example2.oauth2.refresh.url", "https://login.microsoftonline.com/<directory-id-example2>/oauth2/token")
Это также работает для конфигурации кластера Spark.
spark.hadoop.fs.adl.oauth2.access.token.provider.type ClientCredential
spark.hadoop.fs.adl.account.example1.oauth2.client.id <application-id-example1>
spark.hadoop.fs.adl.account.example1.oauth2.credential <service-credential-example1>
spark.hadoop.fs.adl.account.example1.oauth2.refresh.url https://login.microsoftonline.com/<directory-id-example1>/oauth2/token
spark.hadoop.fs.adl.account.example2.oauth2.client.id <application-id-example2>
spark.hadoop.fs.adl.account.example2.oauth2.credential <service-credential-example2>
spark.hadoop.fs.adl.account.example2.oauth2.refresh.url https://login.microsoftonline.com/<directory-id-example2>/oauth2/token
В следующей записной книжке показано, как получить доступ к Azure Data Lake Storage 1-го поколения напрямую и с путем подключения.