如何通过Terraform实现Azure Databricks集群与Blob存储连接及Jar部署
问题描述
我正在通过Terraform创建Azure Databricks集群,现有一个Azure Blob存储账户my_blob_storage,包含storage_jars和storage_logs两个容器,其中storage_jars的jarFiles文件夹下有program.jar文件。我需要实现两个目标:
- 建立Databricks集群与Azure Blob存储的连接
- 将该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
相关产品推荐
相关产品推荐

