Как попробовать YTsaurus

В данном руководстве можно посмотреть на YTsaurus в действии — через установку и запуск кластера.

Вы локально развернёте кластер YTsaurus, создадите таблицу и выполните простой SELECT запрос. Затем вы попробуете чуть более сложный пример — решите классическую задачу Word Count, запустив операцию MapReduce.

Примечание

Наиболее быстрый способ ознакомиться с возможностями продукта — на демо-стенде. Вы получите временный доступ к демо-кластеру, на котором развёрнуты все необходимые компоненты YTsaurus. Всё, что вам понадобится — это браузер.

Перед началом работы

  • Рекомендуемая среда для работы YTsaurus — это x86_64 Linux. Если у вас MacOS с процессором Apple Silicon, для локальной установки YTsaurus вам потребуется использовать режим эмуляции под архитектуру x86. Для этого подойдёт платформа виртуализации Docker Desktop с включённой Rosetta 2. Однако, следует учитывать, что работа YTsaurus в режиме эмуляции не гарантируется.

    Если у вас MacOS с процессором Apple Silicon, для локальной установки YTsaurus вам потребуется использовать режим эмуляции под архитектуру x86.

    Для этого подойдёт платформа виртуализации Docker Desktop с включённой Rosetta 2. Важно! Следует учитывать, что работа YTsaurus в режиме эмуляции не гарантируется.

  • В данном руководстве вы будете запускать YTsaurus кластер в минимальной конфигурации — без гарантий отказоустойчивости.

    Важно

    Не используйте предлагаемую конфигурацию в промышленном окружении и для проведения тестов производительности.

    Примеры того, как настраивать конфигурацию кластера, приведены в Руководстве администратора.

  • Для корректной работы примеров в вашей системе должен быть установлен Python 3.8+.

Установка и запуск YTsaurus кластера

В инструкции будет предложено три способа установить YTsaurus кластер: через Docker, Minikube и Kind.

Независимо от способа установки, в результате будут подняты необходимые компоненты системы: мастер-сервер, планировщик, YQL, Query Tracker и другие. Все последующие примеры из этого руководства — создание таблиц, загрузка данных и запуск MapReduce — не зависят от способа установки кластера и будут одинаковыми как для Docker, так и в случае Minikube.

Docker
  • Docker
  • Minikube
  • Kind

Установка YTsaurus CLI

Самый удобный способ взаимодействия с системой YTsaurus — из консоли. Утилита YTsaurus СLI не устанавливается при развёртывании кластера, её нужно установить в системе отдельно.

  1. Для начала установите менеджер пакетов pip3, если он у вас ещё не установлен:
sudo apt update
sudo apt install python3-pip
  1. Проверьте, что всё получилось:
$ pip3 --version
pip 22.0.2 from ...
  1. Установите утилиту ytsaurus-client:
pip3 install --user ytsaurus-client
  1. Добавьте путь до $HOME/.local/bin в переменную PATH:
export PATH="$PATH:$HOME/.local/bin"
Как сохранить это изменение после перезагрузки системы
echo 'export PATH="$PATH:$HOME/.local/bin"' >> ~/.bashrc # Команда добавит строку в конец файла ~/.bashrc
source ~/.bashrc  # Применить изменения сейчас
  1. Проверьте, что установка YTsaurus СLI прошла успешно:
$ yt --version
Version: YT wrapper 0.13.20

Подробнее про работу с CLI можно посмотреть в ознакомительном вебинаре (начиная с 24:30).

Выполнение примеров

В данной инструкции вы создадите таблицу, запишете в неё данные и выполните простой SELECT запрос. В конце раздела приведён более сложный пример — запуск MapReduce операции.

1. Установите переменные окружения

Это понадобится в следующих примерах, для доступа к кластеру через CLI.

Docker
  • Docker
  • Minikube
  • Kind

2. Создайте таблицу

В YTsaurus все данные хранятся в таблицах. Поэтому для начала создайте таблицу:

$ yt create table //home/input_table --attributes '{schema = [{name = id; type = int64}; {name = text; type = string}]}'
> 16-64ca-10191-47007b7d

Значение 16-64ca-10191-47007b7d — это идентификатор созданного узла Кипариса. Идентификаторы узлов полезны при работе с транзакциями в YTsaurus. В рамках текущего примера данные идентификаторы вам не понадобятся.

Посмотреть на созданную таблицу можно в веб-интерфейсе. Откройте в браузере адрес, который вы получили при запуске кластера, перейдите на вкладку Navigation и кликните на созданную таблицу:

3. Запишите данные

Теперь запишите данные в таблицу, вызвав команду write-table:

echo '{ "id": 0, "text": "Hello" } { "id": 1, "text": "World!" }' | yt write-table //home/input_table --format json

4. Прочитайте результат

Чтобы убедиться, что данные записались в таблицу, выполните команду:

$ yt read-table //home/input_table --format json
{"id":0,"text":"Hello"}
{"id":1,"text":"World!"}

Другой способ прочитать таблицу — выполнить SELECT запрос в веб-интерфейсе. Для этого перейдите во вкладку Queries и введите запрос:

SELECT * FROM `//home/input_table`;

Всплывает ошибка 'Attribute "cluster_name" is not found'

Если вы поднимали YTsaurus кластер через Docker, проделайте шаги:

  1. В веб-интерфейсе перейдите на вкладку Queries.

  2. Нажмите иконку настроек — она находится справа в верхней части страницы. Удалите текущий Settings.

  3. Нажмите кнопку Add setting и в полях укажите значения: "cluster" и "primary" соответственно. Нажмите галочку.

Если вы поднимали YTsaurus кластер через Minikube — пожалуйста, сообщите нам об этой ошибке в community-чате.

Продвинутый пример: запуск MapReduce

В этом разделе показано, как запустить MapReduce операцию — на примере задачи Word Count.

  1. Подготовьте данные
  2. Создайте таблицу и запишите в неё данные
  3. Запустите MapReduce
  4. Прочитайте результат
Как выполняется MapReduce

В случае с задачей Word Count, схема выполнения MapReduce будет выглядеть так:

  1. Исходный текст разбивается на строки, и каждая строка записывается в таблицу в виде отдельной записи.
  2. Для каждой записи выполняется Map операция — она будет выдавать для каждого слова пару колонок (<слово>, 1).
  3. Результат из предыдущего шага сортируется по первой колонке.
  4. По первой колонке выполняется Reduce операция, суммирующая вторую колонку. На выходе получается набор пар (<слово>, <количество упоминаний слова>).

1. Подготовьте данные

Скачайте исходный текст и преобразуйте его в tab-separated формат:

curl -s https://raw.githubusercontent.com/ytsaurus/ytsaurus/refs/heads/main/yt/docs/code-examples/source/moem.txt > source.txt
awk '{gsub(/\t/, "\\t"); print "lineno="NR"\ttext="$0}' source.txt > source.tsv
Про tab-separated формат
  • Строки таблицы отделяются друг от друга переводом строки \n
  • Колонки отделяются друг от друга табуляцией \t
  • Имя колонки и содержимое колонки отделяются друг от друга знаком =

К примеру, строка: lineno=1\tsize=6\tvalue=foobar описывает строку с колонками lineno, size и value со значениями 1, 6 и foobar соответственно. Символы табуляции экранируются.

Подготовьте исходник программы, которая будет выполнять MapReduce операцию. Скачайте скрипт — он написан на Python 3 — и сохраните его локально:

curl -s https://raw.githubusercontent.com/ytsaurus/ytsaurus/refs/heads/main/yt/docs/code-examples/python/word-count.py > word-count.py

2. Создайте таблицу

Создайте две таблицы — одну для исходных данных, а вторую для результатов выполнения MapReduce:

yt create table //home/mapreduce_input --attributes '{schema = [{name = lineno; type = string}; {name = text; type = string}]}'
yt create table //home/mapreduce_result --attributes '{schema = [{name = count; type = string}; {name = word; type = string}]}'

Если вы получаете ошибку 'Cannot determine backend type: either driver config or proxy url should be specified.' — необходимо выставить переменную окружения YT_PROXY.

Теперь запишите данные в исходную таблицу, вызвав команду write-table:

cat source.tsv | yt write-table //home/mapreduce_input --format dsv

Чтобы проверить, что в таблицу записались данные, можно прочитать таблицу с помощью команды read-table. В квадратных скобках указан полуинтервал — получить первые шесть строк таблицы:

yt read-table '//home/mapreduce_input[:#6]' --format dsv

3. Запустите MapReduce

Запустите MapReduce операцию с помощью команды map-reduce:

yt map-reduce --mapper "python3 word-count.py map" --reducer "python3 word-count.py reduce" --map-local-file word-count.py --reduce-local-file word-count.py --src //home/mapreduce_input --dst //home/mapreduce_result --reduce-by word --format dsv

Статус запущенной операции можно отследить в веб-интерфейсе, в разделе Operations.

Где найти этот раздел

4. Прочитайте результат

Теперь можно прочитать итоговую таблицу, выполнив простой SELECT запрос. В веб-интерфейсе перейдите во вкладку Queries и введите запрос:

SELECT * FROM `//home/mapreduce_result`
ORDER BY count
LIMIT 30;

Удаление кластера

Docker
  • Docker
  • Minikube
  • Kind

Демо-стенд

Это онлайн-демонстрация возможностей YTsaurus. Чтобы получить доступ к демо-кластеру, заполните форму. После этого на указанную почту придёт письмо — в нём будет информация касательно доступов к кластеру.

Для взаимодействия с YTsaurus на демо-стенде настроено несколько сред:

Jupyter Notebook

В ноутбуке подготовлено множество примеров для работы c YTsaurus — создание таблиц, загрузка данных, использование CHYT, SPYT, YQL и примеры SDK. Обзор всех примеров приведён на стартовой странице ноутбука About YTsaurus demo.

Ссылка на поднятый Jupyter Notebook будет в письме.

Веб-интерфейс

Тут вы сможете ознакомиться с возможностями веб-интерфейса YTsaurus: изучить файловую систему, посмотреть на список пулов, позапускать запросы в Query Tracker.

Ссылка на веб-интерфейс поднятого кластера будет в письме.

Про работу в веб-интерфейсе можно послушать в ознакомительном вебинаре (начиная с минуты 15:30).

Решение проблем

Если у вас что-то не получилось — не стесняйтесь задавать вопросы в community-чате в телеграме. Мы обязательно вам ответим.

Чтобы оставить пожелания или замечания по документации, пожалуйста, заведите issue в GitHub-репозитории проекта. Ваш фидбек всегда приветствуется — он поможет сделать документацию лучше.

Кипарис — это распределённая файловая система и хранилище метаинформации. В Кипарисе хранятся таблицы и файлы. Подробнее читайте в документации.

Образы контейнеров собираются из Dockerfile, который можно посмотреть тут.

Инструмент для запуска SQL-подобных запросов. Query Tracker доступен в веб-интерфейсе — в разделе Queries. Подробнее читайте в документации.

Это декларативный язык запросов к системам хранения и обработки данных. Основан на SQL синтаксисе.

Отвечает за отказоустойчивое хранение метаданных кластера. К ним относится информация о пользователях системы, о хранимых объектах и о местоположении самих данных. Подробнее читайте в документации.

Отвечает за распределение ресурсов между операциями и за процесс их исполнения на кластере. Подробнее в документации.

Предыдущая