Вышел YTsaurus 25.2.0

Рассказываем про ключевые обновления

Вышел YTsaurus 25.2.0. Ниже приведены основные изменения, для получения подробностей, пожалуйста, ознакомьтесь с release notes.

Для установки YTsaurus Server 25.2.0 обновите k8s‑operator до версии 0.27.0.

Важные изменения

  • Добавлена поддержка Nvidia GPU в k8s‑operator. Улучшено обнаружение GPU‑устройств в контейнере джоба. Документация.

  • Добавлен bundle controller для управления tablet cell bundles на небольших кластерах. Этот компонент распределяет tablet‑ноды между бандлами, управляет обслуживанием нод и контролирует распределение CPU и памяти между tablet‑нодами. Документация.

  • Добавлена поддержка multiproxy‑режима в RPC‑прокси. RPC‑прокси (включая RPC‑прокси в Job Proxy) можно настроить для работы с удалёнными кластерами. Документация.

Обновления языка запросов динтаблиц

  • Добавлены функции cardinality_state и cardinality_merge.

  • Добавлена поддержка функций timestamp для произвольных часовых поясов.

  • Реализована функция array_agg.

  • Добавлена поддержка простых подзапросов в секции FROM.

Изменения по умолчанию и депрекации

  • Параметр decommission_through_extra_peers теперь включён по умолчанию; это существенно снижает простой при обслуживании tablet‑нод.

  • Удалённое копирование hunks включено по умолчанию.

  • Учёт ресурсов динамических таблиц переключен с аккаунтов на бандлы.

  • Операция remote copy устанавливаtт некоторые системные атрибуты на таблице‑назначении, даже если в спецификации указано copy_attributes=false; список таких атрибутов: compression_codec, erasure_codec, optimize_for.

  • Депрекация list_node. Мастер‑серверы теперь будут писать в лог сообщение уровня alert после загрузки снапшота, если он содержит list_node. Это поведение можно отключить опцией alert_on_list_node_load. Рекомендуем перейти на другие типы и удалить или заменить все оставшиеся узлы вида list_node. В противном случае в следующем мажорном релизе мастер‑сервер не запустится. В этот релиз мы добавили скрипт, который поможет с миграцией в подавляющем большинстве случаев. Он находится по пути yt/yt/scripts/master/replace_list_nodes.

Подробнее про депрекацию list_node

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

Что такое list_node и почему мы от них отказываемся?

list_node — это тип узлов Кипариса, схожий с map_node. Эти два типа — единственные, которые могут иметь другие Кипарисные узлы в качестве дочерних. Сейчас мы разрабатываем новые подходы к улучшению масштабируемости мастер‑сервера и в рамках этой задачи решили прекратить поддерживать узлы‑списки. Поддержка этого типа оказалась затруднительной при минимальном количестве преимуществ. Мы уже убрали все list_node с наших внутренних инсталляций, и большинству пользователей оказалось достаточно предложенных нами альтернатив.

Как мигрировать

Мы покажем, как проверить кластер на наличие list_node объектов, и выпустим скрипт для их замены на узлы типа document. И то и другое произойдёт в ближайшем мажорном релизе 25.2. Ниже мы рассмотрим наиболее частые случаи использования узлов‑списков, ведь все возможные сценарии предугадать трудно.

Что использовать вместо узлов‑списков?

Вот типичные сценарии использования list_node и наши рекомендации по замене:

  1. В роли очередей:

    Во время нашей внутренней миграции мы обнаружили, что многие пользователи использовали узлы‑списки в качестве очередей. Это логично: узлы‑списки позволяют обращаться к дочерним элементам по индексу и добавлять элементы в конец, имитируя поведение очереди. К счастью, их легко заменить документ‑узлами в таких случаях использования. Тип document хранит произвольный YSON и поддерживает все типы YSON, включая списки. Таким образом, документы поддерживают те же операции со списками, что и узлы‑списки. Обратите внимание: документы не могут содержать директории, таблицы или другие типы узлов Кипариса. Если ваше приложение опирается на использование этих типов внутри списка, документы не подойдут. Подробнее см. в документации.

  2. В качестве прочих YSON‑подобных структур:

    При запуске без указания типа некоторые команды создают узлы‑списки, и пользователи могут пользоваться этим непреднамеренно. Например, команда yt set //home/some_path '["something"; "something"]' создаст узел‑список. Если данные, хранящиеся в вашем узле‑списке, можно представить как YSON, рекомендуем хранить их в виде документ‑узла.

  3. Когда дочерние элементы — это map‑узлы или таблицы, или когда на них используются блокировки:

    Такие случаи встречались редко, но бывали ситуации, когда у узлов‑списков в качестве дочерних были директории или таблицы, или когда пользователям требовалось блокировать элементы списка. Если вашей логике всё же нужно нужно блокировать элементы или хранить в узлах‑списках директории либо таблицы, то мы рекомендуем полностью перейти на директории. Обратите внимание: тип map_node не поддерживает вставку дочерних элементов по индексу. По нашему опыту, узлы‑списки не были широко востребованы в этих специфических случаях, и большинство приложений легко адаптируется.

Обеспечение плавного перехода

В версии 24.1 мы добавили опцию в динамическую конфигурацию мастер‑сервера forbid_list_node_creation, запрещающую создание новых узлов‑списков.

Начиная с версии 24.2 эта опция включена по умолчанию. Поэтому, если ваш кластер введён в эксплуатацию начиная с версии 24.2, вероятно, никаких действий не потребуется.

Чтобы проверить, создают ли ваши процессы узлы‑списки, включите опцию forbid_list_node_creation:

$ yt set //sys/@config/cypress_manager/forbid_list_node_creation %true

В предстоящем релизе 25.2 мастер‑сервер будет выдавать предупреждение при загрузке снапшота, в котором содержатся узлы‑списки.

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

Войдите, чтобы сохранить пост