Поддерживаемые схемы бакетов в Ozone
Схема бакета (bucket layout) в Ozone определяет, как хранятся данные в бакете и интерпретируются ключи (имена объектов) на уровне метаданных. Выбор схемы бакета напрямую влияет на операции пространства имен (namespace), параметры производительности и совместимость функций.
Ozone поддерживает следующие схемы бакетов:
-
FILE_SYSTEM_OPTIMIZED (FSO)
Иерархическое представление файловой системы с директориями и файлами, аналогичное HDFS. Обеспечивает высокопроизводительные операции над метаданными пространства имен, а также предоставляет возможности чтения и записи с помощью коннектора Amazon S3.
Данная схема эффективна для древовидных хранилищ с глубокой вложенностью и большим количеством маленьких файлов. Поддерживает атомарные операции переименования, что особенно важно для фреймворков типа Spark, Hive и прочих. Подробная информация о принципе работы схемы и обработке метаданных, доступна на странице документации Ozone.
-
OBJECT_STORE (OBS)
Предоставляет плоскую структуру пространства имен (ключ/значение), аналогичную Amazon S3. Данная схема не предполагает наличия традиционных директорий, а вместо этого используются префиксы. В отличие от FSO, операции переименования являются немного более затратными, так как предполагают действия копирования и удаления.
Эта схема подходит для рабочих нагрузок, активно использующих протокол S3, или в случаях, когда не требуется POSIX-семантика.
-
LEGACY
Используется для обратной совместимости со старыми версиями Ozone.
|
РЕКОМЕНДАЦИЯ
При выборе схемы бакета используйте FILE_SYSTEM_OPTIMIZED или OBJECT_STORE в зависимости от предполагаемой рабочей нагрузки.
В следующей таблице приводится краткое описание этих двух схем.
|
| Характеристика | FILE_SYSTEM_OPTIMIZED (FSO) | OBJECT_STORE (OBS) |
|---|---|---|
Пространство имен |
Иерархичное |
Плоское |
"Реальные" директории |
Да |
Нет |
Оптимизирована для Hadoop |
Да |
Нет |
S3-семантика |
Частично |
Да |
Установка схемы бакета
Чтобы указать схему бакета, используйте параметр --layout при создании бакета Ozone.
Например:
$ ozone sh bucket create --layout FILE_SYSTEM_OPTIMIZED /vol1/fso-bucket
$ ozone sh bucket create --layout OBJECT_STORE /vol1/obs-bucket
Для проверки схемы бакета используйте команду bucket info.
Например:
$ ozone sh bucket info vol1/fso-bucket
Вывод:
{
"metadata" : { },
"volumeName" : "vol1",
"name" : "fso-bucket",
"storageType" : "DISK",
"versioning" : false,
"listCacheSize" : 1000,
"usedBytes" : 0,
"usedNamespace" : 0,
"creationTime" : "2026-03-05T08:52:25.331Z",
"modificationTime" : "2026-03-05T08:52:25.331Z",
"sourcePathExist" : true,
"quotaInBytes" : -1,
"quotaInNamespace" : -1,
"bucketLayout" : "FILE_SYSTEM_OPTIMIZED",
"owner" : "konstantin",
"link" : false
}
$ ozone sh bucket info vol1/obs-bucket
Вывод:
{
"metadata" : { },
"volumeName" : "vol1",
"name" : "obs-bucket",
"storageType" : "DISK",
"versioning" : false,
"listCacheSize" : 1000,
"usedBytes" : 0,
"usedNamespace" : 0,
"creationTime" : "2026-03-05T08:57:00.517Z",
"modificationTime" : "2026-03-05T08:57:00.517Z",
"sourcePathExist" : true,
"quotaInBytes" : -1,
"quotaInNamespace" : -1,
"bucketLayout" : "OBJECT_STORE",
"owner" : "konstantin",
"link" : false
}
Поддержка интерфейсов Ozone
Ozone — это система хранения данных, которая поддерживает множество протоколов и интерфейсов для взаимодействия. Основные поддерживаемые интерфейсы:
-
S3;
-
OFS;
-
O3FS (устаревший, не рекомендован к использованию).
Следующая таблица отражает совместимость схем бакетов и клиентских интерфейсов.
| Схема бакета | S3-совместимый интерфейс | O3FS | OFS |
|---|---|---|---|
URL-схема: http://<bucket>.<host>:9878/ |
URL-схема: o3fs://<bucket>.<volume>.<om-id>/key |
URL-схема: ofs://<om-id>/<volume>/<bucket>/key |
|
FSO |
✅ |
✅ |
✅ |
OBS |
✅ |
❌ |
❌ |
|
РЕКОМЕНДАЦИЯ
Для обозначения путей в Ozone рекомендуется использовать ofs:// вместо s3a://, где это возможно.
Например, используйте ofs://ozn/vol1/test-bucket/key1 вместо s3a://test-bucket/key1.
|
Примеры листинга файлов
Ниже приведены примеры листинга файлов в Ozone с использованием различных интерфейсов.
$ hadoop fs -ls ofs://ozn/vol1/test-bucket
Вывод:
-rw-rw-rw- 3 konstantin konstantin 13 2026-03-05 10:32 ofs://ozn/vol1/test-bucket/test.txt
$ hadoop fs -ls o3fs://test-bucket.vol1.ozn
Вывод:
-rw-rw-rw- 3 konstantin konstantin 13 2026-03-05 10:32 o3fs://test-bucket.vol1.ozn/test.txt
$ hadoop fs
-Dfs.s3a.access.key=test@RU-CENTRAL1.INTERNAL
-Dfs.s3a.secret.key=ff76210...
-Dfs.s3a.endpoint=http://<s3-gateway-host>:9878/ (1)
-Dfs.s3a.change.detection.version.required=false (2)
-cat s3a://test-bucket//file.txt
| 1 | Адрес S3-шлюза (S3 gateway). |
| 2 | Параметр, позволяющий игнорировать версионирование S3-бакетов. Ozone не поддерживает версионирование S3-бакетов, поэтому данный параметр необходимо указать явно. |
Вывод:
drwxrwxrwx - konstantin konstantin 13 2026-03-05 11:31 s3a://test-bucket/test.txt
|
ВАЖНО
Попытка получить доступ к данным в бакете типа scala> spark.read.orc("ofs://adho/s3v/obs-bucket/table_orc3")
java.lang.IllegalArgumentException: Bucket: obs-bucket has layout: OBJECT_STORE, which does not support file system semantics. Bucket Layout must be FILE_SYSTEM_OPTIMIZED or LEGACY.
|
Маркеры директорий S3A
Чтобы записать данные в бакет типа FSO c помощью протокола S3, необходимо явно указать следующий параметр в настройках сервиса Ozone (Custom ozone-site.xml):
fs.s3a.directory.marker.retention=keep
Если этого не сделать, поддиректории (subdirectory) будут удаляться после завершения операции записи, поскольку S3 не поддерживает традиционные директории. Коннектор S3A имеет возможность сохранять объекты-маркеры директорий для путей, содержащих файлы или поддиректории.
Больше информации о поведении маркеров директорий доступно в статье Controlling the S3A Directory Marker Behavior.