Microsoft已弃用Azure Blob Storage的 Windows Azure Storage Blob 驱动程序(WASB),转而使用 Azure Blob 文件系统驱动程序(ABFS);请参阅连接到 Azure Data Lake Storage 和 Blob Storage。 ABFS 在 WASB 上有很多好处:请参阅有关 ABFS 的 Azure 文档。
本文提供了有关维护使用 WASB 驱动程序的代码的文档。 Databricks 建议对所有连接到 Azure Blob Storage 的连接使用 ABFS。
在 Databricks 中配置 WASB 凭据
WASB 驱动程序允许使用存储帐户访问密钥或共享访问签名 (SAS)。 (如果从公共存储帐户读取数据,则无需配置凭据)。
每当需要在 Azure Databricks 中传递凭据时,Databricks 建议使用 secrets。 所有可以访问机密范围的用户都可以获取机密。
您可以传递凭据:
- 范围限定为 Spark 配置中的群集
- 范围限定为笔记本
- 附加到已装载的目录
Databricks 建议将所有连接升级到 使用 ABFS 访问 Azure Blob Storage,该模式提供与 WASB 类似的访问模式。 与Azure Blob Storage交互时,使用 ABFS 获得最佳安全性和性能。
若要配置群集凭据,请在创建群集时设置 Spark 配置属性。 在群集级别设置的凭据可供有权访问该群集的所有用户使用。
若要配置笔记本范围的凭据,请使用 spark.conf.set()。 在笔记本级别传递的凭据可供所有有权访问该笔记本的用户使用。
使用存储帐户访问密钥,设置 Azure Blob 存储凭据
存储帐户访问密钥授予对存储帐户中所有容器的完全访问权限。 虽然此模式对于原型制作非常有用,但请避免在生产中使用此模式,以降低与授予对生产数据的无限制访问权限相关的风险。
spark.conf.set(
"fs.azure.account.key.<storage-account-name>.blob.core.chinacloudapi.cn",
"<storage-account-access-key>"
)
可以将帐户密钥 URI 升级为使用 ABFS。 有关详细信息,请参阅 使用 ABFS 访问 Azure Blob Storage。
使用共享访问签名设置Azure Blob Storage凭据 (SAS)
可以使用 SAS 令牌配置对在特定时间到期的存储帐户中的单个容器的有限访问权限。
spark.conf.set(
"fs.azure.sas.<container-name>.<storage-account-name>.blob.core.chinacloudapi.cn",
"<sas-token-for-container>"
)
使用数据帧 API 访问Azure Blob Storage
Apache Spark 数据帧 API 可以使用在笔记本或群集级别配置的凭据。 所有 WASB 驱动程序 URI 都可指定容器和存储帐户名称。 目录名称是可选的,可以指定相对于容器的多个嵌套目录。
wasbs://<container-name>@<storage-account-name>.blob.core.chinacloudapi.cn/<directory-name>
以下代码示例演示如何使用 DataFrames API 和 Databricks Utilities (dbutils) 引用 与容器中的命名目录进行交互。
df = spark.read.format("parquet").load("wasbs://<container-name>@<storage-account-name>.blob.core.chinacloudapi.cn/<directory-name>")
dbutils.fs.ls("wasbs://<container-name>@<storage-account-name>.blob.core.chinacloudapi.cn/<directory-name>")
若要更新 ABFS 而不是 WASB,请更新 URI。 有关详细信息,请参阅 Access Azure 存储。
使用 SQL 访问Azure Blob Storage
运行 Spark SQL 的笔记本无法访问笔记本会话配置中设置的凭据。
在群集配置中设置帐户访问密钥或 SAS 后,可以将标准 Spark SQL 查询用于Azure Blob Storage:
-- SQL
CREATE DATABASE <db-name>
LOCATION "wasbs://<container-name>@<storage-account-name>.blob.core.chinacloudapi.cn/";
若要更新 ABFS 而不是 WASB,请更新 URI;请参阅 Access Azure 存储。
将Azure Blob Storage容器装载到 DBFS
可以将Azure Blob Storage容器或容器中的文件夹装载到 DBFS。 有关 Databricks 建议,请参阅 在 Azure Databricks 上装载云对象存储。
重要
DBFS 使用在创建装入点时提供的凭据来访问已装载的 Blob 存储容器。 如果 Blob 存储容器是使用存储帐户访问密钥装载的,则 DBFS 在访问此装入点时会使用从存储帐户密钥派生的临时 SAS 令牌。
装载 Azure Blob 存储容器
Databricks 建议使用 ABFS 而不是 WASB。 有关使用 ABFS 装载的详细信息,请参阅:使用 ABFS 装载 ADLS 或Blob Storage。
若要在容器内装载 Blob 存储容器或文件夹,请使用以下命令:
Python
dbutils.fs.mount( source = "wasbs://<container-name>@<storage-account-name>.blob.core.chinacloudapi.cn", mount_point = "/mnt/<mount-name>", extra_configs = {"<conf-key>":dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")})Scala(编程语言)
dbutils.fs.mount( source = "wasbs://<container-name>@<storage-account-name>.blob.core.chinacloudapi.cn/<directory-name>", mountPoint = "/mnt/<mount-name>", extraConfigs = Map("<conf-key>" -> dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")))其中
-
<storage-account-name>是Azure Blob 存储帐户的名称。 -
<container-name>是Azure Blob 存储帐户中的容器的名称。 -
<mount-name>是一个 DBFS 路径,表示 Blob 存储容器或该容器中的某个文件夹(在source中指定)要装载到 DBFS 中的什么位置。 -
<conf-key>可以是fs.azure.account.key.<storage-account-name>.blob.core.chinacloudapi.cn或fs.azure.sas.<container-name>.<storage-account-name>.blob.core.chinacloudapi.cn -
dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")获取作为秘密存储在秘密范围中的密钥。
-
像访问本地文件一样访问容器中的文件,例如:
Python
# python df = spark.read.format("text").load("/mnt/<mount-name>/...") df = spark.read.format("text").load("dbfs:/<mount-name>/...")Scala(编程语言)
// scala val df = spark.read.format("text").load("/mnt/<mount-name>/...") val df = spark.read.format("text").load("dbfs:/<mount-name>/...")SQL
-- SQL CREATE DATABASE <db-name> LOCATION "/mnt/<mount-name>"