布局
文件系统优化 (FSO)
登录后可跨设备保存划线和私人笔记登录
概述
文件系统优化(File System Optimized,FSO)是一种针对 Hadoop 兼容文件系统(HCFS)操作进行优化的存储桶布局。与对象存储(OBS)布局不同,FSO 会为中间目录保留独立的条目,从而支持目录列举、重命名和删除等高效的文件系统操作。FSO 存储桶支持对任意层级的目录执行原子重命名与删除操作,且耗时与目录层级深度及其中包含的文件数量无关,均为常数时间。
例如,在 FSO 存储桶中,键会保留其层级结构进行存储:
/mybucket/data/2025/nov/report
/mybucket/data/2025/dec/summary
/mybucket/archive/2024/logs/applog每个中间目录(data、2025、nov 等)都作为单独的条目存储,从而可以高效地执行目录级别的操作。
:::note
FSO 是 Ozone 中的默认存储桶布局。在创建存储桶时若要显式指定 FSO 布局,请使用 --layout 标志:
:::
ozone sh bucket create /<volume-name>/<bucket-name> --layout FILE_SYSTEM_OPTIMIZED为什么 Ozone 需要 FSO?
1. 原子操作(O(1) 因素)
在标准对象存储中,如果重命名一个包含 100 万个文件 的目录,系统必须:
- 找到全部 100 万个键
- 将它们复制到新的路径字符串
- 删除那 100 万个旧键
这是 O(n) 复杂度的操作——文件越多,耗时越长。
而在 FSO 中,重命名 只是一次元数据指针的更新。要将 /data 重命名为 /archive,Ozone 只需在 DirectoryTable 中找到 data 对应的条目,将其名称更新为 archive。所有子项(那数百万个文件)原地不动,因为它们指向的是该目录的 unique ID,而非其名称。
2. 删除操作
删除包含数百万个文件的目录非常高效,因为所有子条目共享相同的父 ID 前缀,Ozone 可以通过基于前缀的查询快速定位并删除它们,而无需扫描整个命名空间。
何时选择 FSO 而非对象存储(OBS)
请选择 文件系统优化模式(FSO) 的场景:
- 使用 Hadoop 兼容文件系统(HCFS)接口
- 存储分析型工作负载的数据(Hive、Spark 等)
- 处理层级目录结构
- 需要原子目录操作(重命名、删除)
- 需要回收站功能
请选择 对象存储模式(OBS) 的场景:
- 主要使用 S3 兼容 API
- 处理扁平的对象访问模式
配置
要在创建存储桶时更新默认布局,请在 ozone-site.xml 中配置以下属性:
| 属性 | 默认值 | 说明 |
|---|---|---|
ozone.default.bucket.layout | 无 | 如果客户端在创建存储桶时未指定布局,则设置所有存储桶的默认布局 |
ozone.client.fs.default.bucket.layout | FILE_SYSTEM_OPTIMIZED | 设置使用 OFS 客户端创建的存储桶的默认布局 |
ozone.s3g.default.bucket.layout | OBJECT_STORE | 定义通过 S3 API 创建的存储桶的默认布局 |
关于内部元数据结构和实现的详细技术信息
评论
登录后参与评论
正在加载评论…
KnowForge