将数据湖存储第 2 代与数据块连接起来

connecting data lake storage gen 2 with databricks

我正在尝试将 MS Azure databricks 与数据湖存储 v2 连接,但无法匹配客户端、机密范围和密钥。

我在 Azure 数据湖 v2 中有数据。我正在尝试按照这些说明进行操作:

https://docs.azuredatabricks.net/spark/latest/data-sources/azure/azure-datalake-gen2.html#requirements-azure-data-lake

我创建了一个'service principle'角色"Storage Blob Data Contributor",获得了

我已经在 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 中?

https://login.microsoftonline.com/XXXXXXXXXX/oauth2/token 中的 XXXX 应该是您的租户 ID(从门户 > 属性 > DirectoryID 中的 Azure Active Directory 选项卡获取)。

客户端 ID 是 ApplicationID/Service 主体 ID(遗憾的是,这些名称在 Azure 世界中可以互换使用 - 但它们都是一样的)。

如果您尚未创建服务主体,请按照以下说明操作:https://docs.microsoft.com/en-us/azure/storage/common/storage-auth-aad-app#register-your-application-with-an-azure-ad-tenant - 确保在创建后授予服务主体访问您的湖的权限。

您应该为主体 ID 密钥创建一个范围和机密 - 因为这是您想对自由文本隐藏的内容。您不能在 Databricks UI 中创建它(目前)。使用其中之一:

目前我认为无法在 Azure KeyVault 中创建机密 - 尽管我希望将来能看到。从技术上讲,您可以使用他们的 API 手动与 Key Vault 集成,但这会给您带来另一个麻烦,因为需要秘密凭证才能连接到 Key Vault。

我遇到了同样的问题,我唯一额外做的就是在 azure 存储资源管理器中将应用程序的默认权限分配给 datalake gen2 的 blob 容器。它需要应用程序的对象 ID,这不是 UI 上可用的对象 ID,可以通过在 azure-cli 上使用命令 "az ad sp show --id " 来获取它。 给blob容器赋予权限后,新建一个文件,然后尝试访问它,