You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Terraform实现Azure Databricks集群与Blob存储连接及Jar部署

问题描述

我正在通过Terraform创建Azure Databricks集群,现有一个Azure Blob存储账户my_blob_storage,包含storage_jars和storage_logs两个容器,其中storage_jars的jarFiles文件夹下有program.jar文件。我需要实现两个目标:

  1. 建立Databricks集群与Azure Blob存储的连接
  2. 将该Jar文件作为库部署到Databricks集群

我尝试在databricks_cluster资源中使用library块,以及通过spark.jars配置dbfs/wasb路径,但都没成功。现有集群Terraform代码如下:

resource "databricks_cluster" "shared_autoscaling" {
  depends_on              = [module.my_databricks_workspace]
  cluster_name            = "my_databricks_cluster"
  spark_version           = data.databricks_spark_version.latest_lts.id
  node_type_id            = data.databricks_node_type.smallest.id
  autotermination_minutes = 0
  autoscale {
    min_workers = 1
    max_workers = 4
  }
}

解决方案

以下是两种可行的Terraform实现方案,均需先确保Databricks集群能访问Blob存储:

方法一:直接通过Databricks库资源挂载Blob中的Jar

1. 配置Blob存储访问凭证

先创建Databricks秘密范围存储Blob账户的访问密钥,避免硬编码:

# 创建秘密范围
resource "databricks_secret_scope" "blob_scope" {
  name                     = "blob-storage-scope"
  initial_manage_principal = "users"
}

# 存储Blob账户访问密钥
resource "databricks_secret" "blob_access_key" {
  scope       = databricks_secret_scope.blob_scope.name
  key         = "azure_storage_access_key"
  string_value = var.azure_storage_access_key # 从变量传入Blob账户的访问密钥
}

2. 配置集群的Spark访问权限

在集群资源中添加Spark配置,授权集群访问Blob存储:

resource "databricks_cluster" "shared_autoscaling" {
  depends_on              = [module.my_databricks_workspace, databricks_secret.blob_access_key]
  cluster_name            = "my_databricks_cluster"
  spark_version           = data.databricks_spark_version.latest_lts.id
  node_type_id            = data.databricks_node_type.smallest.id
  autotermination_minutes = 0
  autoscale {
    min_workers = 1
    max_workers = 4
  }

  # Spark配置:挂载Blob存储
  spark_conf = {
    "fs.azure.account.key.my_blob_storage.blob.core.windows.net" = "{{secrets/${databricks_secret_scope.blob_scope.name}/azure_storage_access_key}}"
  }
}

3. 创建关联Jar的库资源

使用databricks_library直接引用Blob中的Jar路径:

resource "databricks_library" "cluster_jar" {
  cluster_id = databricks_cluster.shared_autoscaling.id
  jar        = "wasbs://storage_jars@my_blob_storage.blob.core.windows.net/jarFiles/program.jar"
}

方法二:将Jar复制到DBFS后挂载

如果直接访问Blob存在网络或权限问题,可先将Jar同步到DBFS再挂载:

1. 配置Blob访问并同步Jar到DBFS

# 复用方法一中的集群Spark配置(确保能访问Blob)
resource "databricks_cluster" "shared_autoscaling" {
  # ... 原有集群配置 ...
  spark_conf = {
    "fs.azure.account.key.my_blob_storage.blob.core.windows.net" = "{{secrets/${databricks_secret_scope.blob_scope.name}/azure_storage_access_key}}"
  }
}

# 将Blob中的Jar复制到DBFS指定路径
resource "databricks_dbfs_file" "jar_file" {
  source = "wasbs://storage_jars@my_blob_storage.blob.core.windows.net/jarFiles/program.jar"
  path   = "/dbfs/jars/program.jar"
  depends_on = [databricks_cluster.shared_autoscaling]
}

2. 在集群中引用DBFS的Jar

修改集群资源,通过library块直接加载DBFS中的Jar:

resource "databricks_cluster" "shared_autoscaling" {
  # ... 原有集群配置 ...
  spark_conf = {
    "fs.azure.account.key.my_blob_storage.blob.core.windows.net" = "{{secrets/${databricks_secret_scope.blob_scope.name}/azure_storage_access_key}}"
  }

  library {
    jar = "dbfs:/jars/program.jar"
  }
}

排查要点
  • 确认Blob存储的访问密钥正确,且集群所在VNet可访问Blob存储(私有网络环境需配置端点)
  • 检查Jar路径格式:wasbs://<容器名>@<存储账户名>.blob.core.windows.net/<文件路径>
  • 验证集群Spark版本支持wasb/dbfs协议,无需额外依赖包

内容的提问来源于stack exchange,提问作者quickLambda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 04:30:01