Databricks File System (DBFS) 详细介绍
什么是 DBFS?
Databricks File System (DBFS) 是 Databricks 平台提供的一个分布式文件系统,它抽象了底层存储系统,为用户提供了一个统一的文件系统接口来访问各种存储服务。
DBFS 的主要特点
-
抽象层:DBFS 作为存储抽象层,可以访问多种后端存储系统
-
统一路径:通过统一的
/dbfs
路径访问文件 -
持久化存储:与临时集群存储不同,DBFS 中的数据在集群终止后仍然保留
-
多种后端支持:可以挂载 Azure Blob Storage、AWS S3、Google Cloud Storage 等
DBFS 的架构
DBFS 采用客户端-服务器架构:
-
客户端:运行在 Databricks 集群上的驱动程序和执行程序
-
服务器:Databricks 控制平面中的 DBFS 服务
DBFS 的主要组件
-
根目录:
/
或/dbfs
-
默认目录:
-
/FileStore
- 用于存储上传的文件和图表 -
/databricks-datasets
- 包含示例数据集 -
/tmp
- 临时文件存储
-
DBFS 的使用方式
1. 通过 UI 访问
-
在 Databricks 工作区中通过"数据"选项卡浏览 DBFS
-
上传/下载文件
2. 通过 API 访问
python
复制
# 列出目录内容 dbutils.fs.ls("/") # 创建目录 dbutils.fs.mkdirs("/tmp/my_folder") # 复制文件 dbutils.fs.cp("/source/file", "/destination/file") # 删除文件 dbutils.fs.rm("/path/to/file")
3. 通过文件系统 API 访问
python
复制
# 使用标准文件操作 with open("/dbfs/tmp/myfile.txt", "w") as f: f.write("Hello DBFS") # 使用 Spark API df = spark.read.csv("/data/file.csv")
DBFS 挂载点
可以将外部存储挂载到 DBFS 中:
python
复制
dbutils.fs.mount( source = "wasbs://container@storageaccount.blob.core.windows.net", mount_point = "/mnt/blobstorage", extra_configs = {"fs.azure.account.key.storageaccount.blob.core.windows.net": "access_key"} )
挂载后可以通过 /mnt/blobstorage
访问外部存储。
DBFS 的优势
-
简化访问:统一接口访问不同存储系统
-
权限集成:与 Databricks 的访问控制集成
-
性能优化:Databricks 对常用操作进行了优化
-
多语言支持:支持 Python、Scala、R 和 SQL
-
版本兼容:与 Spark API 完全兼容
DBFS 的局限性
-
不是真正的文件系统:而是存储抽象层
-
某些 POSIX 功能不支持:如文件锁定、符号链接等
-
性能考虑:对于高频小文件操作可能不如本地文件系统高效
最佳实践
-
避免大量小文件:合并小文件以提高性能
-
使用挂载点:对于频繁访问的外部存储
-
合理组织目录:按项目或团队组织文件结构
-
定期清理:删除不再需要的临时文件
-
利用缓存:对于重复访问的数据考虑使用缓存
DBFS 是 Databricks 平台的核心组件之一,为大数据处理提供了灵活、统一的存储访问方式,极大简化了数据工程师和数据科学家的工作流程。