Azure、Databricks、Spark - 无法使用SAS令牌连接
我正在尝试访问我的 Azure 存储容器中的 JSON 文件,以便读取数据。
我把我的 Spark 配置成这样:
spark.conf.set(f"fs.azure.account.auth.type.{STORAGE_ACCOUNT_NAME}.dfs.core.windows.net", "SAS")
spark.conf.set(f"fs.azure.sas.token.provider.type.{STORAGE_ACCOUNT_NAME}.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.sas.FixedSASTokenProvider")
spark.conf.set(f"fs.azure.sas.fixed.token.{STORAGE_ACCOUNT_NAME}.dfs.core.windows.net", SAS_TOKEN)
logging.info('spark was configured')
但是当我尝试连接时,出现了一个错误:"服务器未能验证请求。请确保授权头的值正确形成,包括签名部分。"
(403错误)。
data = get_data_from_file(BLOB_PATH)
/* SAS 令牌是正确的,文件路径也是正确的。
** 容器的网络设置中启用了防火墙(关闭防火墙也没有帮助)。
*** 如果我尝试从其他存储读取数据是可以的,但为什么呢?我没有在设置中做什么。
1 个回答
1
“服务器未能验证请求。确保授权头的值正确形成,包括签名。”(403)
出现这个问题可能有几个原因:
- 如果你在使用 blob 存储,那么你必须使用
wasbs
而不是abfss
。我用我的SAS
令牌尝试了下面的代码,结果在我的 blob 存储上也出现了同样的错误。
** 容器的网络设置中启用了防火墙(禁用它也没有帮助)。**
要访问 Azure blob 存储中的文件,而防火墙设置为 仅来自选定网络
,
- 你需要为 Databricks 工作区配置
VNet
(虚拟网络)。 - 然后将同一个虚拟网络添加到你的存储账户中。
- 我还选择了
服务端点
和子网委派
,如下所示: - 现在运行代码以从 ADLS 文件中获取数据。
另外,可以查看 这个 StackOverflow 的回答作为参考。