Монтирование ADLS - Секрет не существует с областью действия: <scopename>и ключом: <keynameforservicecredential> - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь смонтировать озеро данных gen2 в Databricks, но безуспешно. Интересно, почему. В Регистрации приложений есть Secret под названием «DataLakeSecret». Существует Key Vault Secret с именем StorageGen2Secret, и он имеет секретное значение DataLakeSecrets.

//http://www.stevedem.com/mounting-adls-gen2-in-databricks/
//https://docs.databricks.com/data/data-sources/azure/azure-datalake-gen2.html#mount-adls- 
   filesystem&language-scala

//Session configuration
val applicationid = "1111158b9-3525-4c62-8c48-d3d7e2c16a6a"
val secret = "1111xEPjpOIBJtBS-W9B9Zsv7h9IF:qw"
val tenantID = "11114839-0afa-4fae-a34a-326c42112bca"
val scopename = "key-vault-secrets"
val keynameforservicecredential = "StorageGen2Secret"
val fileSystemName = "fileshare1"
val storageaccountname = "111datalake"

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" -> "<applicationid>",
  "fs.azure.account.oauth2.client.secret" -> dbutils.secrets.get(scope = "<scopename>", key = " 
  <keynameforservicecredential>"),
        mountPoint = "/mnt/<mount-name>",
      extraConfigs = configs)

//ERROR:
ava.lang.IllegalArgumentException: Secret does not exist with scope: <scopename> and key: 
<keynameforservicecredential>
    at 
com.databricks.backend.common.rpc.SimpleSecretManagerClient.getSecret(SecretManagerClient.scala:228)
at com.databricks.dbutils_v1.impl.SecretUtilsImpl.getBytesInternal(SecretUtilsImpl.scala:46)
at com.databricks.dbutils_v1.impl.SecretUtilsImpl.get(SecretUtilsImpl.scala:61)

1 Ответ

1 голос
/ 01 апреля 2020

Вы можете выполнить следующие шаги для создания точки монтирования, используя Azure Key-vault.

У вас должна быть следующая информация:

• Идентификатор клиента (также известный как Application ID) => Имя ключа как ClientID = 06exxxxxxxxxxd60ef

• Секрет клиента (он же Секрет приложения) => Имя ключа как ClientSecret = ArrIxxxxxxxxxxxxxxbMt] *

• Идентификатор каталога (он же ID арендатора) => Имя ключа как DirectoryID = https://login.microsoftonline.com/ / oauth2 / token

• Секретное имя области данных блоков данных => chepra

• Имя файловой системы => Файловая система

• Учетная запись хранения Имя => chepragen2

• Имя монтирования => Кенни

Azure Обычный метод монтирования озера данных Gen2:

Scala Код:

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" -> "06ecXXXXXXXXXXXXXXXXXX60ef",
  "fs.azure.account.oauth2.client.secret" -> "ArXXXXXXXXXXXXXMt]*",
  "fs.azure.account.oauth2.client.endpoint" -> "https://login.microsoftonline.com/72f98XXXXXXXXXXXXXXXXXXX1db47/oauth2/token")

// Optionally, you can add <directory-name> to the source URI of your mount point.
dbutils.fs.mount(
  source = "abfss://filesystem@chepragen2.dfs.core.windows.net/",
  mountPoint = "/mnt/Kenny",
  extraConfigs = configs)

enter image description here

Azure Крепление Data Lake Gen2 с использованием Azure Хранилище ключей:

Создание области с использованием Azure Хранилище ключей:

Примечание: Имя области - это имя keyvault, т. Е. "Chepra" и Key создаются как show.

Go to Azure Portal => Выберите созданное хранилище ключей => создать секреты следующим образом:

enter image description here

Scala Код:

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" -> dbutils.secrets.get(scope = "chepra", key = "ClientID"),
            "fs.azure.account.oauth2.client.secret" -> dbutils.secrets.get(scope = "chepra", key = "ClientSecret"),
            "fs.azure.account.oauth2.client.endpoint"-> dbutils.secrets.get(scope = "chepra", key = "DirectoryID"))

// Optionally, you can add <directory-name> to the source URI of your mount point.
dbutils.fs.mount(
  source = "abfss://filesystem@chepragen2.dfs.core.windows.net/",
  mountPoint = "/mnt/Kenny01",
  extraConfigs = configs)

enter image description here

...