Медиумы
В данном разделе описаны типы носителей — медиумы, приведены примеры настроек хранения данных на различных медиумах.
Общие сведения
Различные типы носителей (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 |
Транзиентность медиума. |