布局
对象存储 (OBS)
登录后可跨设备保存划线和私人笔记登录
1. 概述
对象存储(Object Store)桶布局将键(key)连同其完整路径名存储在扁平的命名空间中,针对 S3 兼容的访问模式进行了优化。每个键都独立存储,并保留其完整路径(例如 dir1/dir2/file.txt),这一点与 Amazon S3 类似。
与文件系统优化(FSO)桶不同,对象存储桶:
- 不会创建中间目录条目
- 完全按照提供的原样保留键名(不做路径规范化)
- 优先保证 S3 API 兼容性,而非文件系统语义
note
Apache Ozone 支持三种桶布局类型:
- OBJECT_STORE (OBS)、FILE_SYSTEM_OPTIMIZED (FSO) 以及 LEGACY(用于向后兼容的已弃用布局)。
2. 工作原理
- 键以其完整路径名作为单个条目存储。创建
dir1/dir2/file.txt时,只会存储该键本身——不会创建任何中间目录。 - 操作支持基于前缀的列举和过滤。键是相互独立的对象——删除其中一个不会影响其他键,即使它们共享相同的前缀。
- 对象存储是通过 S3 网关创建的桶的默认布局,以确保 S3 API 兼容性。
示例:创建键
当您在对象存储桶中创建键时:
# Create these keys:
ozone sh key put /myvolume/mybucket/images/photo1.jpg photo1.jpg
ozone sh key put /myvolume/mybucket/images/subfolder/photo3.jpg photo3.jpg
ozone sh key put /myvolume/mybucket/data/2024/01/report.json report.jsonKeyTable 中将包含三个独立的条目:
/myvolume/mybucket/images/photo1.jpg/myvolume/mybucket/images/subfolder/photo3.jpg/myvolume/mybucket/data/2024/01/report.json
不会创建任何中间目录 —— 这些路径(images/、images/subfolder/、data/2024/01/)仅仅是键名本身的一部分。
与文件系统优化布局的对比:
Object Store (OBS) Structure: File System Optimized (FSO) Structure:
┌─────────────────────────┐ ┌─────────────────────────┐
│ KeyTable │ │ DirectoryTable │
│ (Flat, full paths) │ │ (Hierarchical IDs) │
│ │ │ │
│ /vol/bucket/dir/file │ │ /volID/bucketID/dirID │
│ /vol/bucket/dir/file2 │ │ /volID/bucketID/dir2ID │
│ /vol/bucket/dir2/file3 │ │ │
└─────────────────────────┘ │ FileTable │
│ (Files with parent IDs) │
│ │
│ dirID/file │
│ dirID/file2 │
│ dir2ID/file3 │
└─────────────────────────┘3. 命令行操作
创建对象存储桶
要创建使用对象存储布局的存储桶,请使用 --layout 选项,取值为 obs 或 OBJECT_STORE:
# Using short form 'obs'
ozone sh bucket create /myvolume/mybucket --layout obs
# Using full form 'OBJECT_STORE'
ozone sh bucket create /myvolume/mybucket --layout OBJECT_STORE示例:
$ ozone sh bucket create /s3v/myapp-data --layout obs
Bucket myapp-data is created检查存储桶布局
要验证现有存储桶的布局,可使用 bucket info 命令:
ozone sh bucket info /myvolume/mybucket输出将包含 bucketLayout 字段:
{
"volumeName" : "myvolume",
"name" : "mybucket",
"bucketLayout" : "OBJECT_STORE",
"storageType" : "DISK",
"versioning" : false,
"creationTime" : "2024-01-15T10:30:00.000Z",
"modificationTime" : "2024-01-15T10:30:00.000Z"
}删除密钥
从对象存储(Object Store)存储桶中删除密钥:
# Delete a single key
ozone sh key delete /myvolume/mybucket/dir1/dir2/file.txt
# Delete multiple keys (requires prefix matching)
ozone sh key delete /myvolume/mybucket/dir1/ --recursive注意:--recursive 标志会删除具有指定前缀的所有键,但这并非原子操作——它会逐个删除键。
删除存储桶
删除一个对象存储桶:
# Delete empty bucket
ozone sh bucket delete /myvolume/mybucket
# Delete bucket with all keys (recursive)
ozone sh bucket delete /myvolume/mybucket --recursive警告:递归删除会永久移除存储桶中的所有键,且无法恢复。
4. 配置
默认存储桶布局
创建存储桶时,若未指定 --layout 选项,可以配置所使用的默认存储桶布局。请在 ozone-site.xml 中进行设置:
<property>
<name>ozone.default.bucket.layout</name>
<value>OBJECT_STORE</value>
</property>S3 网关默认布局
对于通过 S3 网关创建的存储桶,请配置默认布局:
<property>
<name>ozone.s3g.default.bucket.layout</name>
<value>OBJECT_STORE</value>
</property>5. 限制
使用对象存储(Object Store)桶布局时,请注意以下限制:
- 不支持原子重命名(需要执行复制并删除操作)
- 不支持原子目录删除
- 不支持目录操作(目录是键名的一部分)
- Hadoop 文件系统兼容性有限
- 不进行路径规范化
6. 最佳实践
- 为 S3 API 使用对象存储布局;为文件系统操作使用 FSO
- 使用一致的前缀来组织键(例如
year/month/day/file.txt)
评论
登录后参与评论
正在加载评论…
KnowForge