如何使用 SAS 读取 Azure databricks 中的 blob

Posted

技术标签:

【中文标题】如何使用 SAS 读取 Azure databricks 中的 blob【英文标题】:How to read a blob in Azure databricks with SAS 【发布时间】:2020-07-07 19:22:41 【问题描述】:

我是 Databricks 的新手。我编写示例代码来读取 Azure Databricks 中的存储 Blob。

blob_account_name = "sars"
blob_container_name = "mpi"
blob_sas_token =r"**"
ini_path = "58154388-b043-4080-a0ef-aa5fdefe22c8"

inputini = 'wasbs://%s@%s.blob.core.windows.net/%s' % (blob_container_name, blob_account_name, ini_path)
spark.conf.set("fs.azure.sas.%s.%s.blob.core.windows.net"% (blob_container_name, blob_account_name), blob_sas_token)

print(inputini)
ini=sc.textFile(inputini).collect()

它抛出错误:

Container mpi in account sars.blob.core.windows.net not found

我猜它没有在 WASBS 链接中附加 SAS 令牌,因此它没有读取数据的权限。

如何在 wasbs 链接中附加 SAS。

【问题讨论】:

【参考方案1】:

这是例外行为,您无法从 Databricks 访问读取的私有存储。为了从启用了防火墙或在 vnet 中创建的存储访问私有数据,您必须在 Azure 虚拟网络中部署 Azure Databricks,然后将存储帐户防火墙中的 Vnet 地址范围列入白名单。您可以参考配置 Azure Storage 防火墙和虚拟网络。

具有私人访问权限:

当您为“私人(无匿名访问)”提供访问级别时。

输出:错误消息

shaded.databricks.org.apache.hadoop.fs.azure.AzureException: shaded.databricks.org.apache.hadoop.fs.azure.AzureException: 找不到帐户 cheprasas.blob.core.windows.net 中的容器 carona ,并且我们无法使用匿名凭据创建它,并且在配置中找不到它们的凭据。

具有容器访问权限:

当您提供对“Container(容器和 Blob 的匿名读取访问权限)”的访问级别时。

输出:您将能够毫无问题地看到输出。

参考:Quickstart: Run a Spark job on Azure Databricks using the Azure portal。

【讨论】:

如果我的回答对您有帮助,您可以接受它作为答案(单击答案旁边的复选标记,将其从灰色切换为已填充。)。这对其他社区成员可能是有益的。谢谢。

以上是关于如何使用 SAS 读取 Azure databricks 中的 blob的主要内容,如果未能解决你的问题,请参考以下文章

使用 SAS 令牌从 Azure 阶段读取时出现雪花错误

要上传的特定文件的 Azure SAS 令牌?具有读取和到期时间(JAVA)

如何使用 Javascript SDK 为 Azure 存储生成用户委托 SAS

完成文件上传后,如何使用 nodejs 撤销 Azure 的共享访问签名(SAS)?

Azure 存储:如何使用 .NET SDK 生成 SAS 连接字符串

如何使用 SAS 令牌从 C# 连接到 Azure BlobStorage?