Databricks Spark作业删除Azure Blob报错:缺少默认HttpClient依赖
解决Databricks Spark作业中Azure Blob删除的HttpClient依赖问题
错误原因
报错核心是Azure Storage Blob SDK依赖HTTP客户端实现,但Databricks环境默认未包含对应的依赖包。本地运行正常是因为本地项目依赖链中间接引入了Netty或OkHttp这类HTTP客户端实现,而Databricks集群的类路径里没有。
解决方案
方案1:添加HTTP客户端依赖
根据错误提示,需引入azure-core-http-netty或azure-core-http-okhttp中的一个,具体方式分两种场景:
场景A:通过Maven/Gradle打包作业JAR
如果代码打包成JAR提交到Databricks,在项目依赖管理文件中添加以下依赖(二选一即可):
Maven(pom.xml)
<!-- 选择Netty实现 --> <dependency> <groupId>com.azure</groupId> <artifactId>azure-core-http-netty</artifactId> <version>1.12.7</version> <!-- 版本需与azure-storage-blob兼容,如12.x系列对应1.x --> </dependency> <!-- 或选择OkHttp实现 --> <dependency> <groupId>com.azure</groupId> <artifactId>azure-core-http-okhttp</artifactId> <version>1.10.7</version> </dependency>
Gradle(build.gradle)
// 选择Netty实现 implementation 'com.azure:azure-core-http-netty:1.12.7' // 或选择OkHttp实现 implementation 'com.azure:azure-core-http-okhttp:1.10.7'
场景B:直接在Databricks作业中添加依赖
如果直接在Databricks作业中运行代码(未打包JAR),可通过作业库配置添加依赖:
- 打开Databricks作业编辑页面
- 切换到「库」标签页
- 点击「添加」,选择「Maven」类型
- 输入坐标(如
com.azure:azure-core-http-netty:1.12.7),保存后重新运行作业
方案2:改用Databricks原生API删除Blob
Databricks提供dbutils.fs工具,可直接操作Azure Blob,无需额外SDK依赖,代码更简洁:
val accountName: String = spark.conf.get("AZURE_BLOB_STORAGE_ACCOUNT_NAME") val containerName: String = "你的容器名" val folderName: String = "你的文件夹名" // 递归删除目标目录下所有Blob dbutils.fs.rm(s"wasbs://$containerName@$accountName.blob.core.windows.net/$folderName", recurse = true)
注意事项
- 确保HTTP客户端依赖版本与
azure-storage-blob版本兼容,避免版本冲突 - 使用方案2时,需确保Databricks集群已配置好Azure Blob存储的访问权限(与原代码的账号密钥配置一致)
内容的提问来源于stack exchange,提问作者mham
相关产品推荐
相关产品推荐

