Медиумы

В данном разделе описаны типы носителей — медиумы, приведены примеры настроек хранения данных на различных медиумах.

Общие сведения

Различные типы носителей (HDD, SSD, RAM) логически объединены в специальные сущности, называемые медиумами (medium).
Типы носителей отличаются по объёму доступного пространства, скорости чтения и записи. Чем выше скорость носителя, тем меньше его объём.

На каждом носителе располагается чанковая локация. В случае диска чанковая локация является разделом на файловой системе. Медиумы разделяют всё множество чанковых локаций на непересекающиеся подмножества. При этом один узел кластера может иметь локации, относящиеся к разным медиумам. В пределах каждого такого подмножества осуществляется независимая балансировка чанков и независимое квотирование. При выдаче дисковой квоты аккаунту, квота выдаётся в конкретном медиуме. Пользователь может выбирать, на каком медиуме хранить те или иные данные.

На кластерах YTsaurus распространены следующие виды медиумов:

  • default — множество HDD дисков в кластере.
  • ssd_blobs — множество SATA SSD дисков в кластере.
  • ssd_journals — множество SATA SSD или NVMe SSD дисков для хранения журналов динамических таблиц.

Получить список медиумов на кластере:

CLI

yt list //sys/media

Назначение медиума

Чтобы настроить, на каких медиумах будут храниться чанки владельца чанков (таблицы, файла или журнала), задайте значение атрибута media. Значение этого атрибута — словарь, в котором ключом для каждой записи служит имя медиума, а значением — словарь, имеющий две записи:

  • Ключ — "replication_factor", значение — коэффициент репликации в данном медиуме.
  • Ключ — "data_parts_only", значение — флаг. На медиумах с "data_parts_only" = %true erasure-coded объекты хранят только data-парты и не хранят erasure-парты. Например:

CLI

$ yt get //path/to/my/table/@media
{
  "default" = {
    "replication_factor" = 3;
    "data_parts_only" = %false;
  };
  "ssd_blobs" = {
    "replication_factor" = 1;
    "data_parts_only" = %true;
  };
}

Чтобы добавить таблицы реплик на ещё одном медиуме, установите атрибут media:

CLI

yt set //path/to/my/table/@media '
{
  "default" = {
    "replication_factor" = 3;
    "data_parts_only" = %false;
  };
  "ssd_blobs" = {
    "replication_factor" = 1;
    "data_parts_only" = %true;
   };
}'

Кипарис позволяет читать отдельные записи в словарях непосредственно, не считывая весь словарь целиком.
Например, чтобы узнать коэффициент репликации таблицы на медиуме default, выполните команду:

CLI

$ yt get //path/to/my/table/@media/default/replication_factor
3

Чтобы удалить таблицу с медиума, в атрибуте media удалите соответствующую запись:

CLI

yt remove //path/to/my/table/@media/default

Первичный медиум

Для каждого владельца чанков задан особый медиум, который называется первичным. Именно на этот медиум будет осуществляться запись чанков, принадлежащих их владельцу. На остальные медиумы чанки попадают в результате репликации и балансировки.

Чтобы узнать первичный медиум таблицы, прочитайте её атрибут primary_medium. Изменение первичного медиума осуществляется путём перезаписи атрибута. Новые чанки объекта записываются на новый первичный медиум, фактическое перемещение старых чанков происходит в фоновом режиме и может занимать время.

По умолчанию в момент создания устанавливается первичный медиум "default".

Атрибут replication_factor — это синоним для @media/<primary_medium_name>/replication_factor. Атрибут сохранен для обратной совместимости и простоты доступа.

Ограничения

Редактирование атрибута media таблицы — потенциально опасная операция. Например, если указать медиум, где нет места, таблица будет заблокирована на запись. Изменение media приводит к перемещению большого количества данных, это может влиять на производительность.

Поэтому есть ряд ограничений.

  • Как минимум на одном медиуме должны присутствовать все данные, то есть должно выполняться условие: replication_factor > 0 && !data_parts_only.
  • Медиум, для которого data_parts_only == true, не может быть первичным.
  • Попытка сделать первичным медиум, не используемый таблицей, интерпретируется как запрос перенести таблицу со старого первичного медиума на новый.

Транзиентные медиумы

Оперативная память как носитель отличается от HDD и SSD тем, что хранение данных в оперативной памяти ненадёжно. Оперативная память энергозависима, в случае аварийного отключении питания данные в оперативной памяти будут утеряны.

Подобные носители в системе YTsaurus называются транзиентными. Чтобы сообщить системе, что медиум транзиентен, необходимо установить для него атрибут transient, равный %true:

CLI

yt set //sys/media/ram/@transient "%true"

Выставленное свойство не влияет на процесс репликации и балансировки. Система не запрещает хранить чанки исключительно на транзиентных носителях. Это может быть нужно, чтобы временно зафиксировать промежуточные результаты вычисления в памяти.

Чанки, имеющие реплики только на транзиентных медиумах, называются шаткими. Получить их количество можно следующим образом:

CLI

$ yt get //sys/precarious_chunks
42
$ yt get //sys/precarious_vital_chunks
0

Атрибуты

Объект медиума обладает следующими атрибутами:

Атрибут Тип Описание
name string Имя медиума — непустая уникальная строка.
index integer Индекс — небольшое целое число, служащее уникальным идентификатором для внутренних целей.
priority integer Приоритет медиума. В случае чтения чанка, имеющего реплики на нескольких медиумах, будут осуществляться попытки чтения реплик в порядке приоритета.
transient bool Транзиентность медиума.