布局

文件系统优化 (FSO)

师成师成· 更新于 2026-09-28· 阅读 4 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

概述

文件系统优化(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.layoutFILE_SYSTEM_OPTIMIZED设置使用 OFS 客户端创建的存储桶的默认布局
ozone.s3g.default.bucket.layoutOBJECT_STORE定义通过 S3 API 创建的存储桶的默认布局

关于内部元数据结构和实现的详细技术信息

评论

登录后参与评论

正在加载评论…