You need to enable JavaScript to run this app. 如何通过Hadoop FileSystem API访问Azure Storage Emulator做单元测试
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Hadoop FileSystem API访问Azure Storage Emulator做单元测试

正确配置方案

你之前的配置缺少模拟器专用开关,且密钥类型、域名、协议配置都和模拟器默认规则不匹配,正确配置如下:

核心修正点:

  • 必须新增fs.azure.emulator.enabled配置并设为true,开启Hadoop Azure文件系统的模拟器适配逻辑
  • 存储模拟器默认使用账户密钥验证,你填写的长串是默认账户密钥而非SAS密钥,需用账户密钥专用配置项,不能用SAS配置
  • 模拟器默认走HTTP协议,使用wasb即可,无需用HTTPS的wasbs,避免本地证书校验失败
  • 模拟器的正确域名后缀是blob.core.windows.net,不是blob.windows.core.net

完整可运行代码示例:

import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.fs.FileSystem

// 替换为你自己在模拟器中创建的容器名
val containerName = "test-container"
val emulatorAccountName = "devstoreaccount1"
// 模拟器固定默认账户密钥,不需要修改
val emulatorAccountKey = "Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw=="

val hadoopConfig = new Configuration()
// 开启模拟器适配
hadoopConfig.set("fs.azure.emulator.enabled", "true")
// 配置模拟器账户密钥
hadoopConfig.set(s"fs.azure.account.key.${emulatorAccountName}.blob.core.windows.net", emulatorAccountKey)
// 配置默认FS
hadoopConfig.set("fs.defaultFS", s"wasb://${containerName}@${emulatorAccountName}.blob.core.windows.net")
// 配置文件系统实现类
hadoopConfig.set("fs.wasb.impl", "org.apache.hadoop.fs.azure.NativeAzureFileSystem")
hadoopConfig.set("fs.wasbs.impl", "org.apache.hadoop.fs.azure.NativeAzureFileSystem$Secure")

// 获取FileSystem实例
val fs = FileSystem.get(
  new java.net.URI(s"wasb://${containerName}@${emulatorAccountName}.blob.core.windows.net"), 
  hadoopConfig
)

额外注意事项:

  • 运行代码前请确保Azure Storage Emulator已经正常启动,默认端口10000(Blob服务)没有被其他进程占用
  • 请提前在模拟器中创建对应的容器,否则会报容器不存在的错误
  • 建议使用3.3.0及以上版本的hadoop-azure依赖,避免旧版本不支持模拟器配置项的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 16:15:03