Соединение хранилища озера данных 2-го поколения с блоками данных
Я пытаюсь соединить блоки данных MS Azure с хранилищем озера данных v2 и не могу сопоставить клиента, секретную область и ключ.
У меня есть данные в озере данных Azure v2. Я пытаюсь следовать этим инструкциям:
https://docs.azuredatabricks.net/spark/latest/data-sources/azure/azure-datalake-gen2.html
Я создал "принцип обслуживания" с ролью "Участник хранилища BLOB-данных", получил
Я создал секретные области в Azure Keyvault и Databricks с ключами и значениями
Когда я пробую код, указанный ниже, аутентификация не может распознать секретную область и ключ. Из документации мне не ясно, нужно ли использовать секретную область Azure Keyvault или Databricks.
val configs = Map(
"fs.azure.account.auth.type" -> "OAuth",
"fs.azure.account.oauth.provider.type" -> "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
"fs.azure.account.oauth2.client.id" -> "<CLIENT-ID>",
"fs.azure.account.oauth2.client.secret" -> dbutils.secrets.get(scope = "<SCOPE-NAME>", key = "<KEY-VALUE>"),
"fs.azure.account.oauth2.client.endpoint" -> "https://login.microsoftonline.com/XXXXXXXXXX/oauth2/token")
Если кто-то может помочь в этом, пожалуйста, сообщите / подтвердите:
какой должен быть CLIENT-ID: я понимаю, что это из учетной записи хранилища;
где следует создавать SCOPE-NAME и KEY-VALUE в Azure Keyvault или Databricks?
1 ответ
XXXX в https://login.microsoftonline.com/XXXXXXXXXX/oauth2/token должен быть вашим TenantID (получите его на вкладке Azure Active Directory в Портал> Свойства> DirectoryID).
Идентификатор клиента - это ApplicationID/ идентификатор участника службы (к сожалению, эти имена взаимозаменяемы в мире Azure, но это одно и то же).
Если вы еще не создали участника службы, следуйте этим инструкциям: https://docs.microsoft.com/en-us/azure/storage/common/storage-auth-aad-app - убедитесь, что вы предоставляете основному сервису доступ к вашему озеру после его создания.
Вы должны создать область действия и секрет для основного идентификационного ключа - это то, что вы хотите скрыть от свободного текста. Вы не можете создать это в пользовательском интерфейсе Databricks (пока). Используйте один из них:
- CLI - https://docs.databricks.com/user-guide/secrets/secrets.html
- PowerShell - https://github.com/DataThirstLtd/azure.databricks.cicd.tools/wiki/Set-DatabricksSecret
- API REST - https://docs.databricks.com/api/latest/secrets.html
Сейчас я не думаю, что смогу создать секреты в Azure KeyVault - хотя я ожидаю увидеть это в будущем. Технически вы можете вручную интегрироваться с Key Vault, используя их API, но это даст вам еще одну головную боль в необходимости секретных учетных данных для подключения к хранилищу ключей.
Я столкнулся с той же проблемой, единственное, что я сделал дополнительно, - это назначил разрешение приложения по умолчанию для контейнера BLOB-объектов datalake gen2 в обозревателе хранилища Azure. Требуется идентификатор объекта приложения, который не доступен в пользовательском интерфейсе, его можно получить с помощью команды "az ad sp show --id " в azure-cli . После назначения разрешения для контейнера BLOB-объектов создайте новый файл и попробуйте получить к нему доступ,