如何通过Databricks Terraform在Unity Catalog共享集群安装ADLS的wheel包
如何通过Databricks Terraform Provider从ADLS安装自定义Wheel库到Unity Catalog共享集群?
问题背景
已配置Unity Catalog共享模式的Databricks集群,且集群spark_conf已正确设置ADLS连接信息(无需挂载容器),手动从ADLS路径abfss://<container>@<ADLS_name>.dfs.core.windows.net/<wheel_library>.whl安装Wheel库正常,但使用databricks_library资源时触发报错。
尝试的Terraform配置
resource "databricks_library" "databricks_adls_lib" { cluster_id = module.<cluster_resource>.cluster_id whl = "abfss://<container>@<ADLS_name>.dfs.core.windows.net/<wheel_library>.whl" }
报错信息
Error: Method public com.databricks.backend.daemon.dbutils.DBUtilsCore$Result com.databricks.backend.daemon.dbutils.DBUtilsCore.refreshMounts() is not whitelisted on class class com.databricks.backend.daemon.dbutils.DBUtilsCore
解决方案
问题根源
databricks_library资源底层会调用DBUtils的refreshMounts方法处理非DBFS路径,但Unity Catalog共享集群出于安全限制,禁用了该方法的调用,导致报错。
可行方案1:将库配置嵌入databricks_cluster资源
直接在集群定义的libraries字段中添加ADLS路径的Wheel库,绕过单独databricks_library资源的DBUtils依赖:
resource "databricks_cluster" "shared_cluster" { # 其他集群基础配置(如实例池、节点类型等) spark_conf = { # 已配置的ADLS连接信息示例 "fs.azure.account.auth.type.<ADLS_name>.dfs.core.windows.net" = "OAuth" "fs.azure.account.oauth.provider.type.<ADLS_name>.dfs.core.windows.net" = "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider" "fs.azure.account.oauth2.client.id.<ADLS_name>.dfs.core.windows.net" = var.client_id "fs.azure.account.oauth2.client.secret.<ADLS_name>.dfs.core.windows.net" = var.client_secret "fs.azure.account.oauth2.client.endpoint.<ADLS_name>.dfs.core.windows.net" = "https://login.microsoftonline.com/${var.tenant_id}/oauth2/token" } # 嵌入Wheel库配置 libraries { whl = "abfss://<container>@<ADLS_name>.dfs.core.windows.net/<wheel_library>.whl" } }
如果使用模块管理集群,只需在模块内部的databricks_cluster资源中添加上述libraries块即可。
可行方案2:使用Unity Catalog外部位置路径(推荐)
如果已在Unity Catalog中配置了指向ADLS容器的外部位置,可直接使用UC路径引用Wheel库,更符合UC共享集群的权限模型:
# 嵌入集群配置的方式 resource "databricks_cluster" "shared_cluster" { # 其他配置... libraries { whl = "uc://<catalog>.<schema>.<external_location>/<wheel_library>.whl" } } # 若必须使用单独库资源(UC路径无DBUtils依赖问题) resource "databricks_library" "databricks_uc_lib" { cluster_id = module.<cluster_resource>.cluster_id whl = "uc://<catalog>.<schema>.<external_location>/<wheel_library>.whl" }
支持性说明
- 直接在
databricks_cluster资源中嵌入库配置的方式是Databricks Terraform Provider官方支持的,完全兼容Unity Catalog共享集群场景。 - 单独的
databricks_library资源目前在Unity Catalog共享集群中处理abfss路径存在兼容性问题,不推荐使用。
内容的提问来源于stack exchange,提问作者Rufus
相关产品推荐
相关产品推荐

