Поддерживаемые схемы бакетов в 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 с использованием различных интерфейсов.

  • OFS

  • O3FS

  • S3A

$ 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
ВАЖНО

Попытка получить доступ к данным в бакете типа OBJECT_STORE, используя протокол OFS, приводит к ошибке:

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.

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней