当前位置: 首页 > 知识库问答 >
问题:

在带有Terraform的Azure Databricks中安装带有AAD直通的ADLS gen2

龙德义
2023-03-14

我正在尝试使用Database ricks Terraform提供程序使用Azure Active Directory直通将我的ADLS gen2存储容器挂载到DBFS中。我正在按照此处和此处的说明进行操作,但当Terraform尝试部署挂载资源时,我收到以下错误:

错误:找不到ADLS Gen2令牌

我的Terraform代码如下所示(它非常类似于提供者文档中的示例),我使用Azure服务主体进行部署,该主体在同一个模块中创建Databricks工作区:

provider "databricks" {
  host                        = azurerm_databricks_workspace.this.workspace_url
  azure_workspace_resource_id = azurerm_databricks_workspace.this.id
}

data "databricks_node_type" "smallest" {
  local_disk = true

  depends_on = [azurerm_databricks_workspace.this]
}

data "databricks_spark_version" "latest" {
  depends_on = [azurerm_databricks_workspace.this]
}

resource "databricks_cluster" "passthrough" {
  cluster_name            = "terraform-mount"
  spark_version           = data.databricks_spark_version.latest.id
  node_type_id            = data.databricks_node_type.smallest.id
  autotermination_minutes = 10
  num_workers             = 1

  spark_conf = {
    "spark.databricks.cluster.profile"                = "serverless",
    "spark.databricks.repl.allowedLanguages"          = "python,sql",
    "spark.databricks.passthrough.enabled"            = "true",
    "spark.databricks.pyspark.enableProcessIsolation" = "true"
  }

  custom_tags = {
    "ResourceClass" = "Serverless"
  }
}

resource "databricks_mount" "mount" {
  for_each = toset(var.storage_containers)

  name       = each.value
  cluster_id = databricks_cluster.passthrough.id
  uri        = "abfss://${each.value}@${var.sa_name}.dfs.core.windows.net"

  extra_configs = {
    "fs.azure.account.auth.type"                   = "CustomAccessToken",
    "fs.azure.account.custom.token.provider.class" = "{{sparkconf/spark.databricks.passthrough.adls.gen2.tokenProviderClassName}}",
  }

  depends_on = [
    azurerm_storage_container.data
  ]
}

(为了清楚起见,azurerm_storage_container.data 是一组具有var.storage_containers名称的存储容器,这些容器在azurerm_storage_account中创建,名称var.sa_name,因此是URI。

我觉得这个错误是由于我的根本误解,而不是简单的疏忽。我的基本假设是,我可以使用AAD passthrough为工作区装载存储容器,这在我部署整个基础架构时非常方便。也就是说,无论用户何时使用工作区,任何新的直通集群都可以使用这些挂载,而无需设置。

我可以按照 AAD 直通说明手动装载存储容器:启动启用了直通的高并发群集,然后使用 dbutils.fs.mount 进行装载。这是在使用我的用户标识(而不是服务主体)登录到 Databricks 工作区时进行的。这是问题的根源吗?服务主体是否不适合此任务?

(有趣的是,如果我尝试在未启用直通的情况下使用群集访问手动创建的装载上的文件,Databricks 运行时会给我完全相同的错误。

共有1个答案

李云
2023-03-14

是的,这是由于在操作中使用服务原则而产生的问题。azure docs for credentials pass through说:

不能将配置有ADLS凭据(例如,服务主体凭据)的群集与凭据传递一起使用。

 类似资料:
  • 我正在运行Redhat 7.2,我试图安装最新的CURL来支持它上的HTTP2。 我手动安装了OpenSSL 1.0.2g。我安装了YUM的curl 7.48。我还安装了YUM的nghttp2 1.7.1。现在我无法让curl支持HTTP2。 curl--版本curl 7.48.0(x86_64-redhat-linux-gnu)libcurl/7.48.0 NSS/3.19.1基本ECC zli

  • 我正在运行一个Ruby on Rails应用程序,Webpacker使用Yarn,并试图通过Docker Compose在Docker上运行这个程序。当我运行docker compose build时,它看起来运行成功,但找不到node\u modules文件夹,我无法使用任何节点包。我试着像其他帖子中建议的那样,将

  • 现在我的问题是,如何在自定义的而不是自定义的中重写方法?我没有在这里公布我的代码,因为它与链接的代码本质上是相同的,只是我需要为子创建一个自定义的来代替,这样它就可以按照“pptang”的答案所述进行正确的度量。 否则,有没有比在第二个RecyclerView中使用1个RecyclerView更好的方法?只能有1个RecyclerView使用上述列表和每个中唯一项的网格填充活动/片段吗?

  • 我有一台新安装OSX Mojave的Mac电脑。我下载了XAMPP(7.3)并安装了它。本地ApacheWeb服务器工作正常,我从仪表板获得的PHPInfo()显示了php的所有正确信息。ini文件为/Applications/XAMPP/xamppfiles/etc/php。伊尼。 我已经复制了一份PHPInfo,并将其放在向导中: https://xdebug.org/wizard.php 说

  • 我需要帮助一个问题,我遇到了包装我的程序与JPackage。该程序是在Eclipse中创建的非模块化JavaFX应用程序。在Eclipse中,应用程序可以精确地编译和运行。但当我使用命令提示符进行编译和运行时,编译工作了,但应用程序不再运行了。我得到以下错误消息: javac--module-path%path_to_fx%--add-modules javafx.controls,javafx.

  • 我正在构建Mac(10.10.5)安装程序与install4j和捆绑JRE选项在媒体步骤。 在创建安装程序后,当我安装我的应用程序时,在应用程序文件夹中没有生成JRE文件夹。我怎么才能拿到这个?