---
metadata:
  - name: generator
    content: Diplodoc Platform v5.50.6
alternate:
  - https://ytsaurus.tech/docs/en/api/cpp/examples.md
  - https://ytsaurus.tech/docs/ru/api/cpp/examples.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ytsaurus.tech/docs/ru/llms.txt

<!-- source: ru/_includes/api/cpp/examples.md -->
# Примеры использования

Перед запуском примеров необходимо получить [YT-токен](https://ytsaurus.tech/docs/ru/user-guide/storage/auth.md).

Запускать примеры нужно из-под `Linux` без аргументов.


Рекомендуется установить уровень логирования в `INFO` или `DEBUG`, тогда программы будут выводить ссылки на веб-интерфейс, где можно следить за выполнением операций.

Уровень логирования устанавливается с помощью переменной окружения такой командой (см. так же [документацию](https://ytsaurus.tech/docs/ru/api/cpp/description.md#logging)):

```bash
export YT_LOG_LEVEL=INFO
```

Для продакшн-процессов рекомендуется сохранять наиболее полные `DEBUG` логи. В случае возникновения каких-либо проблем они помогут понять, что происходило.

## Базовый уровень

### Простой Map (TNode-версия)

Предположим, что существует таблица с логинами. Необходимо сделать таблицу с email-адресами, вычислив их из логина `email = login + "@domain"`.

Для этого подойдёт простой маппер.

Пример лежит в [yt/cpp/mapreduce/examples/tutorial/simple_map_tnode](https://github.com/ytsaurus/ytsaurus/tree/main/yt/cpp/mapreduce/examples/tutorial/simple_map_tnode).

```c++
 'yt/cpp/mapreduce/tutorial/simple_map_tnode/main.cpp'
```

### Простой Map (Protobuf-версия)

Если известно, как устроена таблица, то может быть удобно воспользоваться форматом [Protobuf](https://ytsaurus.tech/docs/ru/api/cpp/protobuf.md), который:

- несколько быстрее;
- помогает избежать опечаток в названиях колонок и проверит работу с типами.

Пример лежит в [yt/cpp/mapreduce/examples/tutorial/simple_map_protobuf](https://github.com/ytsaurus/ytsaurus/tree/main/yt/cpp/mapreduce/examples/tutorial/simple_map_protobuf).

{% code '/yt/cpp/mapreduce/examples/tutorial/simple_map_protobuf/data.proto' lang='protobuf' %}

{% code '/yt/cpp/mapreduce/examples/tutorial/simple_map_protobuf/main.cpp' lang='c++' %}

### Простой Map с Protobuf и использованием лямбда-выражений в C++

Некоторые достаточно простые операции можно представить в виде лямбда-выражений C++ с пустым capture-list (т. е. не захватывающих переменных) с использованием библиотеки [yt/cpp/mapreduce/library/lambda](https://ytsaurus.tech/docs/ru/api/cpp/lambda.md).

Предыдущий пример может быть переписан так (`data.proto` такой же):

([yt/cpp/mapreduce/examples/tutorial/simple_map_lambda](https://github.com/ytsaurus/ytsaurus/tree/main/yt/cpp/mapreduce/examples/tutorial/simple_map_lambda))

{% code '/yt/cpp/mapreduce/examples/tutorial/simple_map_lambda/main.cpp' lang='c++' %}

### Сортировка таблицы и простая операция Reduce

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

Пример лежит в [yt/cpp/mapreduce/examples/tutorial/simple_reduce_tnode](https://github.com/ytsaurus/ytsaurus/tree/main/yt/cpp/mapreduce/examples/tutorial/simple_reduce_tnode).

{% code '/yt/cpp/mapreduce/examples/tutorial/simple_reduce_tnode/main.cpp' lang='c++' %}

### Сложные типы и формат Protobuf (на примере Reduce)

В качестве примера рассмотрим таблицу с набором записей про ссылки, которые встречаются в веб-документах. Таблица содержит колонки:
- `DocTitle` — имя документа;
- `Link` — структура с полями:
  - `Host` — часть ссылки, содержащая хост;
  - `Port`— часть ссылки, содержащая порт;
  - `Path`— часть ссылки, содержащая путь;
- `OccurrenceCount` — количество встречаний данной ссылки в документе.

Таблица отсортирована по колонке `DocTitle`. Необходимо собрать информацию о каждом документе в одну строку выходной таблицы.

Опишем protobuf-сообщения следующего вида:

{% code '/yt/cpp/mapreduce/examples/tutorial/protobuf_complex_types/data.proto' lang='c++' %}

`TLinkEntry` соответствует строке входной таблицы, `TDoc` — строке выходной.

Поля `TDoc` имеют следующую семантику:
- `Title` — заголовок;
- `Links`— список ссылок, упомянутых в документе;
- `OccurrenceCounts` — список количества вхождений соответствующих ссылок (длина этого списка равна длине списка `Links`);
- `ExtraInfo` — дополнительная информация, в данном случае включающая суммарное количество вхождений ссылок.

{% note warning "Внимание" %}

 `(NYT.field_serialization_mode)` в сообщениях `TDoc` и `TLinkEntry`. Эта опция по умолчанию равна `PROTOBUF`, то есть "сериализовать поле в виде последовательности байт". Выставленное нами значение `YT` означает, что соответствующее вложенное сообщение будет сопоставлено сложному типу в схеме таблицы. В `TDoc` для примера мы пометили поле `ExtraInfo` опцией `(NYT.serialization_mode) = PROTOBUF`(обратите внимание на тип соответствующего поля в выходной таблице).

 {% endnote %}


[Reducer](https://ytsaurus.tech/docs/ru/user-guide/data-processing/operations/reduce.md) пишется естественным образом.

{% code '/yt/cpp/mapreduce/examples/tutorial/protobuf_complex_types/main.cpp' lang='c++' %}

### Reduce с несколькими входными таблицами { #multiple-input-reduce-tnode }

Если кроме старой таблицы с пользователями, есть таблица, где записано, кто робот.

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

Пример лежит в [yt/cpp/mapreduce/examples/tutorial/multiple_input_reduce_tnode](https://github.com/ytsaurus/ytsaurus/tree/main/yt/cpp/mapreduce/examples/tutorial/multiple_input_reduce_tnode).

{% code '/yt/cpp/mapreduce/examples/tutorial/multiple_input_reduce_tnode/main.cpp' lang='c++' %}

### Чтение файлов из операций { #map-tnode-with-file }

Предыдущую задачу можно решать и по-другому: загрузить таблицу с роботами прямо на машины, где будут запускаться операции, и считать её там целиком в `yhash_set`.

В таком случае можно не сортировать таблицу и использовать Map, а не Reduce. Этот способ используется, если таблица небольшая (до нескольких ГБ).

Входные таблицы те же, что и в предыдущем примере: с пользователями и роботами

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

Пример лежит в [yt/cpp/mapreduce/examples/tutorial/map_tnode_with_file](https://github.com/ytsaurus/ytsaurus/tree/main/yt/cpp/mapreduce/examples/tutorial/map_tnode_with_file).

{% code '/yt/cpp/mapreduce/examples/tutorial/map_tnode_with_file/main.cpp' lang='c++' %}

### Reduce с несколькими входными и несколькими выходными таблицами

Теперь необходимо сделать почти то же самое что и в предыдущем примере, но записать сразу 2 выходных таблицы: и с людьми и с роботами.

Пример лежит в [yt/cpp/mapreduce/examples/tutorial/multiple_input_multiple_output_reduce_tnode](https://github.com/ytsaurus/ytsaurus/tree/main/yt/cpp/mapreduce/examples/tutorial/multiple_input_multiple_output_reduce_tnode).

{% code '/yt/cpp/mapreduce/examples/tutorial/multiple_input_multiple_output_reduce_tnode/main.cpp' lang='c++' %}

### Reduce с несколькими входными и несколькими выходными таблицами (Protobuf-версия)

Чтобы сделать разные таблицы для людей и роботов, нужно переписать тот же самый reducer на protobuf. Таблица с людьми будет содержать поля `login`, `email`, `name`. Таблица с роботами будет содержать поля `login` и `uid`. Потребуется завести отдельные типы protobuf сообщений для этих таблиц.

Пример лежит в [yt/cpp/mapreduce/examples/tutorial/multiple_input_multiple_output_reduce_protobuf](https://github.com/ytsaurus/ytsaurus/tree/main/yt/cpp/mapreduce/examples/tutorial/multiple_input_multiple_output_reduce_protobuf).

{% code '/yt/cpp/mapreduce/examples/tutorial/multiple_input_multiple_output_reduce_protobuf/data.proto' lang='c++' %}

{% code '/yt/cpp/mapreduce/examples/tutorial/multiple_input_multiple_output_reduce_protobuf/main.cpp' lang='c++' %}

### Чтение и запись таблиц

YTsaurus позволяет писать в таблицы и дописывать данные в них. По чтению таблиц тоже есть несколько режимов: можно читать как всю таблицу, так и отдельные диапазоны по номеру строки или ключу. См. также разделы про [чтение и запись данных](https://ytsaurus.tech/docs/ru/user-guide/storage/formats.md#table_data) и [таблицы](https://ytsaurus.tech/docs/ru/user-guide/storage/objects.md#tables).

Пример лежит в [yt/cpp/mapreduce/examples/tutorial/table_read_write_tnode](https://github.com/ytsaurus/ytsaurus/tree/main/yt/cpp/mapreduce/examples/tutorial/table_read_write_tnode).

{% code '/yt/cpp/mapreduce/examples/tutorial/table_read_write_tnode/main.cpp' lang='c++' %}

### Передача состояния в джоб

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

Пример лежит в [yt/cpp/mapreduce/examples/tutorial/stateful_map_tnode](https://github.com/ytsaurus/ytsaurus/tree/main/yt/cpp/mapreduce/examples/tutorial/stateful_map_tnode).

{% code '/yt/cpp/mapreduce/examples/tutorial/stateful_map_tnode/main.cpp' lang='c++' %}

### Операция MapReduce (Protobuf-версия)

В YTsaurus есть слитная операция [MapReduce](https://ytsaurus.tech/docs/ru/user-guide/data-processing/operations/mapreduce.md), которая работает несколько быстрее нежели [Map](https://ytsaurus.tech/docs/ru/user-guide/data-processing/operations/map.md) + [Sort](https://ytsaurus.tech/docs/ru/user-guide/data-processing/operations/sort.md) + [Reduce](https://ytsaurus.tech/docs/ru/user-guide/data-processing/operations/reduce.md). Чтобы по таблице с пользователями ещё раз посчитать статистику, сколько раз встречается то или иное имя, перед подсчётом нормализируем имена, приведя их к нижнему регистру. Это нужно, чтобы люди с именами `АРКАДИЙ` и `Аркадий` считались как одно.

Пример лежит в [yt/cpp/mapreduce/examples/tutorial/mapreduce_protobuf](https://github.com/ytsaurus/ytsaurus/tree/main/yt/cpp/mapreduce/examples/tutorial/mapreduce_protobuf).

{% code '/yt/cpp/mapreduce/examples/tutorial/mapreduce_protobuf/main.cpp' lang='c++' %}

### Операция MapReduce (версия с лямбда-выражениями)

Задача та же, что в предыдущем примере.

Этот пример лежит в [yt/cpp/mapreduce/examples/tutorial/mapreduce_lambda](https://github.com/ytsaurus/ytsaurus/tree/main/yt/cpp/mapreduce/examples/tutorial/mapreduce_lambda).

{% code '/yt/cpp/mapreduce/examples/tutorial/mapreduce_lambda/main.cpp' lang='c++' %}

### Подготовка операции в классе джоба { #prepare_operation }

Есть возможность настраивать параметры операции, перегружая метод `IJob::PrepareOperation`, подробности см. в разделе [Описание](https://ytsaurus.tech/docs/ru/api/cpp/description.md#prepare_operation).

{% code '/yt/cpp/mapreduce/examples/tutorial/prepare_operation/grepper.proto' lang='protobuf' %}

{% code '/yt/cpp/mapreduce/examples/tutorial/prepare_operation/main.cpp' lang='c++' %}

## Продвинутый уровень

### Запуск нескольких операций параллельно

Для запуска нескольких операций параллельно существует класс [TOperationTracker](https://github.com/ytsaurus/ytsaurus/tree/main/yt/cpp/mapreduce/library/operation_tracker/operation_tracker.h).

Пример лежит в [yt/cpp/mapreduce/examples/tutorial/operation_tracker](https://github.com/ytsaurus/ytsaurus/tree/main/yt/cpp/mapreduce/examples/tutorial/operation_tracker).

{% code '/yt/cpp/mapreduce/examples/tutorial/operation_tracker/main.cpp' lang='c++' %}

### Reduce с enable_key_guarantee=false

Предположим, нужно отфильтровать таблицу с URL по регулярным выражениям, которые лежат в отдельной таблице с хостами (т. е. для каждого хоста свое регулярное выражение). Задачу можно было бы решить Reduce по колонке `host`, но реальные данные часто устроены таким образом, что какие-то хосты имеют непропорционально много URL. В таблице с примером URL с хоста `https://www.youtube.com` занимают больше половины таблицы. Джоб, который будет обрабатывать такой хост, займёт непропорционально много времени (ключ `https://www.youtube.com` в такой ситуации называют *ключом-монстром*).

Но для решения задачи не нужно, чтобы все записи с одним хостом попадали на одну машину. Возможно распределить таблицу с URL между несколькими машинами: важно, чтобы вместе с URL обязательно был получен хост.

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" style="background-color: rgb(255, 255, 255);" xmlns:xlink="http://www.w3.org/1999/xlink" width="721px" height="861px" version="1.1" content="&lt;mxfile userAgent=&quot;Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0&quot; version=&quot;7.3.7&quot; editor=&quot;www.draw.io&quot; type=&quot;dropbox&quot;&gt;&lt;diagram id=&quot;342e4d60-5584-959f-ebbe-47336cfbbd7e&quot; name=&quot;Page-1&quot;&gt;5Zpdb5swFIZ/Te6DDYZctlnXadqkaZ20awc7YNXgCJwm7a+fCaYB7I5pJc5gvSkcf4Cf1x/nnLCA6+x4X+Bd+lUQyhdgSY4L+GEBgOfDpfpXWZ5rSxhGtSEpGNGVzoYH9kK1UbdL9ozQslNRCsEl23WNschzGsuODReFOHSrbQXvPnWHE2oYHmLMTetPRmRaWyMQnu2fKEvS5skeWtUlGxw/JoXY5/p5CwC3p7+6OMNNX3qgZYqJOLRM8G4B14UQsr7KjmvKK7YNtrrdxzdKX9+7oLn8kwagbvCE+V4PPRWlVN2slXVfcN1hKZ8bNKfB0aq5t4C3h5RJ+rDDcVV6UJNB2VKZcV28ZZyvBRfFqS0kAY2Ir+ylLMQjbZVEYAMRUiXmAPQrPNFC0mPLpAd0T0VGZfGsquhSH2m4evKtdA+Hs5Ker6ukLRWbSYv15Eleez4DVBeaoZ0nHOAJZ8DTC313QP0BoGAOQCFwBzQYAOrPACjwAndA0QDQYA5Ag9Ad0NAKFMzqTAKryB3QaADoHPZQ2MBzAXRlBQpnNUNh5NBtavx++yZKsMTjIlUOOYhjG1KCNigYCakX9M95l0jtrj2YGdLQJVK7dw/nhVTxc4j0t/79VZBm4glvTs+q2he0ZC/teyHVS53vCeW0fU8Ja9/qBEXLMoJiq65gCDn0dr2h+MH52Tc5vcKlS72GwhPnGYnp6RU59NU9e/RzxYTH9PTykUO97MHVFfMpk9MrauIpJ3rZY7dpZxdg2FsB0OEJA+yx27TTCwbR0GEC7PV155RfQLBH1GWOFswyGO5PUuTSUXnjp66JB8P9WYpC6BCpGQz/OJ28YDkiy1zkqtItxxvKv4mSSSZyZY4VNKrKbytYLMb8S6+CFFWnmLPEWv1GF2yElCIbKTXRU8Nr8oRtNSKLGqBJC71LDjN0auQY8UibkBy+31scFr/NpgYMwfvVgKab8Vlsprk0/n0XvX+y+JY068UWHjT9n1rq/3PZwaAvBnAphuk61WKMmDiakBjIu+rKMI8kQ4UyxbvqsmR5wulN9TVctYmwQm0SNbZS7KtX/QuFLnCm+5F5piMLP285xudZZnZtavwC75r8zGzX1Pj1F7Bbfmb26TslewWgT1GNRnZxdOMeDcTCaHA7zBgh1WOs/Lcil/p7XOiPtOLBMPEguBRy3/QbpzZlgcMtU92evz4+lbU+8YZ3vwA=&lt;/diagram&gt;&lt;/mxfile&gt;"><defs/><g transform="translate(0.5,0.5)"><rect x="390" y="38" width="140" height="30" rx="4.5" ry="4.5" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(431.5,46.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="57" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 58px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host1, url1</div></div></foreignObject><text x="29" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">host1, url1</text></switch></g><rect x="390" y="121" width="140" height="30" rx="4.5" ry="4.5" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(431.5,129.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="57" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 58px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host1, url3</div></div></foreignObject><text x="29" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">host1, url3</text></switch></g><rect x="390" y="79" width="140" height="30" rx="4.5" ry="4.5" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(431.5,87.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="57" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 58px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host1, url2</div></div></foreignObject><text x="29" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">host1, url2</text></switch></g><rect x="390" y="162" width="140" height="30" rx="4.5" ry="4.5" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(431.5,170.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="57" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 58px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host1, url4</div></div></foreignObject><text x="29" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">host1, url4</text></switch></g><rect x="390" y="204" width="140" height="30" rx="4.5" ry="4.5" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(431.5,212.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="57" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 58px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host1, url5</div></div></foreignObject><text x="29" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">host1, url5</text></switch></g><rect x="390" y="245" width="140" height="30" rx="4.5" ry="4.5" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(431.5,253.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="57" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 58px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host2, url1</div></div></foreignObject><text x="29" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">host2, url1</text></switch></g><rect x="390" y="287" width="140" height="30" rx="4.5" ry="4.5" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(431.5,295.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="57" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 58px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host2, url2</div></div></foreignObject><text x="29" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">host2, url2</text></switch></g><rect x="390" y="328" width="140" height="30" rx="4.5" ry="4.5" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(431.5,336.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="57" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 58px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host3, url1</div></div></foreignObject><text x="29" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">host3, url1</text></switch></g><rect x="80" y="78" width="140" height="30" rx="4.5" ry="4.5" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(116.5,86.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="67" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 68px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host1, data1</div></div></foreignObject><text x="34" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">host1, data1</text></switch></g><rect x="80" y="118" width="140" height="30" rx="4.5" ry="4.5" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(116.5,126.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="67" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 68px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host2, data1</div></div></foreignObject><text x="34" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">host2, data1</text></switch></g><rect x="80" y="161" width="140" height="30" rx="4.5" ry="4.5" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(116.5,169.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="67" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 68px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host3, data1</div></div></foreignObject><text x="34" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">host3, data1</text></switch></g><rect x="20" y="612" width="140" height="30" rx="4.5" ry="4.5" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(56.5,620.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="67" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 68px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host1, data1</div></div></foreignObject><text x="34" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">host1, data1</text></switch></g><rect x="20" y="652" width="140" height="30" rx="4.5" ry="4.5" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(61.5,660.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="57" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 58px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host1, url1</div></div></foreignObject><text x="29" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">host1, url1</text></switch></g><rect x="20" y="735" width="140" height="30" rx="4.5" ry="4.5" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(61.5,743.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="57" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 58px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host1, url3</div></div></foreignObject><text x="29" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">host1, url3</text></switch></g><rect x="20" y="693" width="140" height="30" rx="4.5" ry="4.5" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(61.5,701.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="57" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 58px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host1, url2</div></div></foreignObject><text x="29" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">host1, url2</text></switch></g><rect x="20" y="776" width="140" height="30" rx="4.5" ry="4.5" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(61.5,784.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="57" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 58px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host1, url4</div></div></foreignObject><text x="29" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">host1, url4</text></switch></g><rect x="300" y="682" width="140" height="30" rx="4.5" ry="4.5" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(341.5,690.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="57" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 58px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host2, url1</div></div></foreignObject><text x="29" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">host2, url1</text></switch></g><rect x="300" y="724" width="140" height="30" rx="4.5" ry="4.5" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(341.5,732.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="57" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 58px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host2, url2</div></div></foreignObject><text x="29" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">host2, url2</text></switch></g><rect x="560" y="662" width="140" height="30" rx="4.5" ry="4.5" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(601.5,670.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="57" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 58px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host3, url1</div></div></foreignObject><text x="29" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">host3, url1</text></switch></g><rect x="300" y="635" width="140" height="30" rx="4.5" ry="4.5" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(336.5,643.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="67" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 68px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host2, data1</div></div></foreignObject><text x="34" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">host2, data1</text></switch></g><rect x="560" y="620" width="140" height="30" rx="4.5" ry="4.5" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(596.5,628.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="67" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 68px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host3, data1</div></div></foreignObject><text x="34" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">host3, data1</text></switch></g><rect x="60" y="57" width="180" height="271" rx="27" ry="27" fill="none" stroke="#000000" pointer-events="none"/><g transform="translate(129.5,40.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="41" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 42px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Table 1</div></div></foreignObject><text x="21" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Table 1</text></switch></g><rect x="370" y="16" width="180" height="372" rx="27" ry="27" fill="none" stroke="#000000" pointer-events="none"/><g transform="translate(439.5,-0.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="41" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 42px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Table 2</div></div></foreignObject><text x="21" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Table 2</text></switch></g><rect x="0" y="588" width="180" height="271" rx="27" ry="27" fill="none" stroke="#000000" pointer-events="none"/><g transform="translate(74.5,571.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="30" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 31px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Job 1</div></div></foreignObject><text x="15" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Job 1</text></switch></g><rect x="280" y="589" width="180" height="271" rx="27" ry="27" fill="none" stroke="#000000" pointer-events="none"/><g transform="translate(354.5,572.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="30" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 31px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Job 2</div></div></foreignObject><text x="15" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Job 2</text></switch></g><rect x="540" y="588" width="180" height="271" rx="27" ry="27" fill="none" stroke="#000000" pointer-events="none"/><g transform="translate(614.5,571.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="30" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 31px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Job 3</div></div></foreignObject><text x="15" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Job 3</text></switch></g><path d="M 40 468 L 120 468 L 120 447 L 140 477 L 120 507 L 120 486 L 40 486 Z" fill="none" stroke="#000000" stroke-miterlimit="10" transform="rotate(90,90,477)" pointer-events="none"/><path d="M 420 468 L 500 468 L 500 447 L 520 477 L 500 507 L 500 486 L 420 486 Z" fill="none" stroke="#000000" stroke-miterlimit="10" transform="rotate(90,470,477)" pointer-events="none"/><path d="M 520 468 L 600 468 L 600 447 L 620 477 L 600 507 L 600 486 L 520 486 Z" fill="none" stroke="#000000" stroke-miterlimit="10" transform="rotate(90,570,477)" pointer-events="none"/><g transform="translate(265.5,457.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="118" height="39" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 34px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 119px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Reduce</div></div></foreignObject><text x="59" y="37" fill="#000000" text-anchor="middle" font-size="34px" font-family="Helvetica">Reduce</text></switch></g><path d="M 140 468 L 220 468 L 220 447 L 240 477 L 220 507 L 220 486 L 140 486 Z" fill="none" stroke="#000000" stroke-miterlimit="10" transform="rotate(90,190,477)" pointer-events="none"/></g></svg>

<svg xmlns="http://www.w3.org/2000/svg" style="background-color: rgb(255, 255, 255);" xmlns:xlink="http://www.w3.org/1999/xlink" width="826.686274766922" height="978.6470594406128" version="1.1" content="&lt;mxfile userAgent=&quot;Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0&quot; version=&quot;7.3.7&quot; editor=&quot;www.draw.io&quot; type=&quot;dropbox&quot;&gt;&lt;diagram id=&quot;342e4d60-5584-959f-ebbe-47336cfbbd7e&quot; name=&quot;Page-1&quot;&gt;7Ztbb+MoFIB/TR53ZYNvecylndFoVqq2K+3OI7FpguqYCpNe5tcvNpBgQyedHZfU1vbBxYf7dw5wgHgGV/vnTww97P6gBS5nICieZ3A9AyCMYCD+NZIXKUnTTAq2jBQq0UlwS75jJVT5tgdS4LqTkFNacvLQFea0qnDOOzLEGH3qJrujZbfWB7TFluA2R6Ut/ZsUfCelGUhP8s+YbHe65jCZy5gNyu+3jB4qVd8MwLv2T0bvkS5LdbTeoYI+GSJ4NYMrRimXof3zCpcNW41N5rt+JfbYboYr/pYMQGZ4ROVBdX1Hay6KWQnpgZWqwJq/aDRt53CTPZzB5dOOcHz7gPIm9kkYg5Dt+L5U0XekLFe0pKzNC4sYZ0Uk5DVn9B4bMRnYwCQRMXYHVBMeMeP42RCpDn3CdI85exFJVGyUKLjK+OaqhKeTJsNIJdkZWtRGi5TxbI8lnwCKgGLo5gnP8IQT4BmmkT+g0RmgYApAIfAHND4DNJoAUBDG/oAmZ4DGUwAap/6Apk6gYFJrEphn/oBmZ4BOYQ6FGp4PoHMnUDgpC4WZR7dJ+/3uSbRAHA2LVDjkIM9dSItkk8QDIQ3j/jrvE6nbtQcTQ5r6ROr27uG0kAp+HpH+0L+/CNI9fUSbtq4mP8M1+W6+Uy4adXovcInNd1wQ81UdUBiSIabqrsKSLPGosHP7B+9r3+j0dTwM86Ivtzd9wQ30+PQFPe4mQ7dvOa3dj1eiwO1bTmv7k6YeN+jH5k5p/5P0iYYeV1UwSWe9b6RJ5nHhe+UofuTOet9KE59n8Y7D+L/alRcEA7KsaCUSLUu0weUNrQkntBLiXEDDIn7ZwCI5Kr/2EnDaFIpKsnUmX6iIDeWc7gfaOsHeblSvNaY2Moc2gN62/pI67JNnrY4Bl7QRqSPqb4zmb9MGTMGvawPabsYXuhnn0Pj4LjroaTp+48AL50Nc8tr+j1T1gLe7Yx52fpVhu05SGQNeZI5IGclllWEvSZYW6h16aII1qbYlXjS/1mkmEcLEJCGx1fTQNPU/aOgd1vQoswEmLn7BEPzs05qx8Tve5VyEn33VOTZ+Se84Pkp98nOfPv1/HP9Di+9pzOt5fOQ+i7ngL87GpzCvx5HRuZ8Iev8B1ggV5vMGJbJPPaSDOcJN9ghUDS/pv0b27ebY/Ic4uaD/ENn+/xdKqt/+xMVBUOijFF3iXSbdWUpRcYA6a/J7UhRNNU4l3NGKq48OYDQM9vkbvF7wbth/YtuQiyXmZclQfo/5eRvtzmgORfRRmuOgoqwdB0NMC128WWLjhXMH3mQIuo5NxTqYLeBMQBF6FuHlsg2LngZtIGwDQn7VPqP2uTYkUIVV+lhHtXmbZ1vFMtAJ5KtMdq3DsnbxXHWrC42GBVoiw7KotqmNBBjyKyNWlnCti10bNcqiFkZ1S9WGkzxrnysVVoVICEm3nccWHhN/vCkinA90stD7LMVxWRAF72XD9sbOQo2rQq1m67xEdU3y3nrVQyJIsJd/xFvwexiGWvCtFQRhrAU3mBHR3kYFQsVC+Ey4zBWrt28d9wEX1rdZFnSxwrJcpYpVTzhiW6zvVyK3JgzUsYO0ljFcIk4eu81w4Vc13Ig1jr9+hJT2FChbrzKddGiX07MYfZ+hy5E9tsppbeHY6TeZh2bYn+LWxpwAu3ORObEs9agXsYmR+DinAWOMy2kkNQqJVazKsjCiFrPm6z2GmxH7EacGcDRbax5wGO7rTlvPe3i/37KL19PXhdJSTp9wwqt/AQ==&lt;/diagram&gt;&lt;/mxfile&gt;"><rect id="svg-fsmoub6z__backgroundrect" width="100%" height="100%" x="0" y="0" fill="none" stroke="none"/><defs/><g class="currentLayer" style=""><title>Layer 1</title><rect x="450.89215686917305" y="51.5" width="140" height="30" rx="4.5" ry="4.5" fill="#d5e8d4" stroke="#82b366" pointer-events="none" id="svg-fsmoub6z__svg_2" class=""/><g id="svg-fsmoub6z__svg_3" class=""><switch transform="translate(0.392157) translate(491.5, 59.5) translate(0.5, 0.5)"><foreignObject style="overflow:visible;" pointer-events="all" width="57" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" id="svg-fsmoub6z__svg_4"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 58px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host1, url1</div></div></foreignObject><text x="29" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" id="svg-fsmoub6z__svg_5">host1, url1</text></switch></g><rect x="450.89215686917305" y="134.5" width="140" height="30" rx="4.5" ry="4.5" fill="#d5e8d4" stroke="#82b366" pointer-events="none" id="svg-fsmoub6z__svg_6" class=""/><g id="svg-fsmoub6z__svg_7" class=""><switch transform="translate(0.392157) translate(491.5, 142.5) translate(0.5, 0.5)"><foreignObject style="overflow:visible;" pointer-events="all" width="57" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" id="svg-fsmoub6z__svg_8"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 58px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host1, url3</div></div></foreignObject><text x="29" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" id="svg-fsmoub6z__svg_9">host1, url3</text></switch></g><rect x="450.89215686917305" y="92.5" width="140" height="30" rx="4.5" ry="4.5" fill="#d5e8d4" stroke="#82b366" pointer-events="none" id="svg-fsmoub6z__svg_10" class=""/><g id="svg-fsmoub6z__svg_11" class=""><switch transform="translate(0.392157) translate(491.5, 100.5) translate(0.5, 0.5)"><foreignObject style="overflow:visible;" pointer-events="all" width="57" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" id="svg-fsmoub6z__svg_12"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 58px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host1, url2</div></div></foreignObject><text x="29" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" id="svg-fsmoub6z__svg_13">host1, url2</text></switch></g><rect x="450.89215686917305" y="175.5" width="140" height="30" rx="4.5" ry="4.5" fill="#d5e8d4" stroke="#82b366" pointer-events="none" id="svg-fsmoub6z__svg_14" class=""/><g id="svg-fsmoub6z__svg_15" class=""><switch transform="translate(0.392157) translate(491.5, 183.5) translate(0.5, 0.5)"><foreignObject style="overflow:visible;" pointer-events="all" width="57" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" id="svg-fsmoub6z__svg_16"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 58px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host1, url4</div></div></foreignObject><text x="29" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" id="svg-fsmoub6z__svg_17">host1, url4</text></switch></g><rect x="450.89215686917305" y="217.5" width="140" height="30" rx="4.5" ry="4.5" fill="#d5e8d4" stroke="#82b366" pointer-events="none" id="svg-fsmoub6z__svg_18" class=""/><g id="svg-fsmoub6z__svg_19" class=""><switch transform="translate(0.392157) translate(491.5, 225.5) translate(0.5, 0.5)"><foreignObject style="overflow:visible;" pointer-events="all" width="57" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" id="svg-fsmoub6z__svg_20"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 58px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host1, url5</div></div></foreignObject><text x="29" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" id="svg-fsmoub6z__svg_21">host1, url5</text></switch></g><rect x="450.89215686917305" y="258.5" width="140" height="30" rx="4.5" ry="4.5" fill="#d5e8d4" stroke="#82b366" pointer-events="none" id="svg-fsmoub6z__svg_22" class=""/><g id="svg-fsmoub6z__svg_23" class=""><switch transform="translate(0.392157) translate(491.5, 266.5) translate(0.5, 0.5)"><foreignObject style="overflow:visible;" pointer-events="all" width="57" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" id="svg-fsmoub6z__svg_24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 58px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host2, url1</div></div></foreignObject><text x="29" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" id="svg-fsmoub6z__svg_25">host2, url1</text></switch></g><rect x="450.89215686917305" y="300.5" width="140" height="30" rx="4.5" ry="4.5" fill="#d5e8d4" stroke="#82b366" pointer-events="none" id="svg-fsmoub6z__svg_26" class=""/><g id="svg-fsmoub6z__svg_27" class=""><switch transform="translate(0.392157) translate(491.5, 308.5) translate(0.5, 0.5)"><foreignObject style="overflow:visible;" pointer-events="all" width="57" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" id="svg-fsmoub6z__svg_28"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 58px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host2, url2</div></div></foreignObject><text x="29" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" id="svg-fsmoub6z__svg_29">host2, url2</text></switch></g><rect x="450.89215686917305" y="341.5" width="140" height="30" rx="4.5" ry="4.5" fill="#d5e8d4" stroke="#82b366" pointer-events="none" id="svg-fsmoub6z__svg_30" class=""/><g id="svg-fsmoub6z__svg_31" class=""><switch transform="translate(0.392157) translate(491.5, 349.5) translate(0.5, 0.5)"><foreignObject style="overflow:visible;" pointer-events="all" width="57" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" id="svg-fsmoub6z__svg_32"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 58px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host3, url1</div></div></foreignObject><text x="29" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" id="svg-fsmoub6z__svg_33">host3, url1</text></switch></g><rect x="140.89215686917305" y="91.5" width="140" height="30" rx="4.5" ry="4.5" fill="#fff2cc" stroke="#d6b656" pointer-events="none" id="svg-fsmoub6z__svg_34" class=""/><g id="svg-fsmoub6z__svg_35" class=""><switch transform="translate(0.392157) translate(176.5, 99.5) translate(0.5, 0.5)"><foreignObject style="overflow:visible;" pointer-events="all" width="67" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" id="svg-fsmoub6z__svg_36"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 68px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host1, data1</div></div></foreignObject><text x="34" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" id="svg-fsmoub6z__svg_37">host1, data1</text></switch></g><rect x="140.89215686917305" y="131.5" width="140" height="30" rx="4.5" ry="4.5" fill="#fff2cc" stroke="#d6b656" pointer-events="none" id="svg-fsmoub6z__svg_38" class=""/><g id="svg-fsmoub6z__svg_39" class=""><switch transform="translate(0.392157) translate(176.5, 139.5) translate(0.5, 0.5)"><foreignObject style="overflow:visible;" pointer-events="all" width="67" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" id="svg-fsmoub6z__svg_40"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 68px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host2, data1</div></div></foreignObject><text x="34" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" id="svg-fsmoub6z__svg_41">host2, data1</text></switch></g><rect x="140.89215686917305" y="174.5" width="140" height="30" rx="4.5" ry="4.5" fill="#fff2cc" stroke="#d6b656" pointer-events="none" id="svg-fsmoub6z__svg_42" class=""/><g id="svg-fsmoub6z__svg_43" class=""><switch transform="translate(0.392157) translate(176.5, 182.5) translate(0.5, 0.5)"><foreignObject style="overflow:visible;" pointer-events="all" width="67" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" id="svg-fsmoub6z__svg_44"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 68px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host3, data1</div></div></foreignObject><text x="34" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" id="svg-fsmoub6z__svg_45">host3, data1</text></switch></g><rect x="30.89215686917305" y="646.5" width="140" height="30" rx="4.5" ry="4.5" fill="#fff2cc" stroke="#d6b656" pointer-events="none" id="svg-fsmoub6z__svg_46" class=""/><g id="svg-fsmoub6z__svg_47" class=""><switch transform="translate(0.392157) translate(66.5, 654.5) translate(0.5, 0.5)"><foreignObject style="overflow:visible;" pointer-events="all" width="67" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" id="svg-fsmoub6z__svg_48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 68px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host1, data1</div></div></foreignObject><text x="34" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" id="svg-fsmoub6z__svg_49">host1, data1</text></switch></g><rect x="30.89215686917305" y="738.5" width="140" height="30" rx="4.5" ry="4.5" fill="#d5e8d4" stroke="#82b366" pointer-events="none" id="svg-fsmoub6z__svg_50" class=""/><g id="svg-fsmoub6z__svg_51" class=""><switch transform="translate(0.392157) translate(71.5, 746.5) translate(0.5, 0.5)"><foreignObject style="overflow:visible;" pointer-events="all" width="57" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" id="svg-fsmoub6z__svg_52"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 58px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host1, url1</div></div></foreignObject><text x="29" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" id="svg-fsmoub6z__svg_53">host1, url1</text></switch></g><rect x="30.89215686917305" y="695.5" width="140" height="30" rx="4.5" ry="4.5" fill="#d5e8d4" stroke="#82b366" pointer-events="none" id="svg-fsmoub6z__svg_54" class=""/><g id="svg-fsmoub6z__svg_55" class=""><switch transform="translate(0.392157) translate(71.5, 703.5) translate(0.5, 0.5)"><foreignObject style="overflow:visible;" pointer-events="all" width="57" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" id="svg-fsmoub6z__svg_56"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 58px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host1, url2</div></div></foreignObject><text x="29" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" id="svg-fsmoub6z__svg_57">host1, url2</text></switch></g><rect x="450.89215686917305" y="695.5" width="140" height="30" rx="4.5" ry="4.5" fill="#d5e8d4" stroke="#82b366" pointer-events="none" id="svg-fsmoub6z__svg_58" class=""/><g id="svg-fsmoub6z__svg_59" class=""><switch transform="translate(0.392157) translate(491.5, 703.5) translate(0.5, 0.5)"><foreignObject style="overflow:visible;" pointer-events="all" width="57" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" id="svg-fsmoub6z__svg_60"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 58px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host2, url1</div></div></foreignObject><text x="29" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" id="svg-fsmoub6z__svg_61">host2, url1</text></switch></g><rect x="450.89215686917305" y="737.5" width="140" height="30" rx="4.5" ry="4.5" fill="#d5e8d4" stroke="#82b366" pointer-events="none" id="svg-fsmoub6z__svg_62" class=""/><g id="svg-fsmoub6z__svg_63" class=""><switch transform="translate(0.392157) translate(491.5, 745.5) translate(0.5, 0.5)"><foreignObject style="overflow:visible;" pointer-events="all" width="57" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" id="svg-fsmoub6z__svg_64"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 58px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host2, url2</div></div></foreignObject><text x="29" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" id="svg-fsmoub6z__svg_65">host2, url2</text></switch></g><rect x="650.892156869173" y="676.5" width="140" height="30" rx="4.5" ry="4.5" fill="#d5e8d4" stroke="#82b366" pointer-events="none" id="svg-fsmoub6z__svg_66" class=""/><g id="svg-fsmoub6z__svg_67" class=""><switch transform="translate(0.392157) translate(691.5, 684.5) translate(0.5, 0.5)"><foreignObject style="overflow:visible;" pointer-events="all" width="57" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" id="svg-fsmoub6z__svg_68"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 58px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host3, url1</div></div></foreignObject><text x="29" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" id="svg-fsmoub6z__svg_69">host3, url1</text></switch></g><rect x="450.89215686917305" y="648.5" width="140" height="30" rx="4.5" ry="4.5" fill="#fff2cc" stroke="#d6b656" pointer-events="none" id="svg-fsmoub6z__svg_70" class=""/><g id="svg-fsmoub6z__svg_71" class=""><switch transform="translate(0.392157) translate(486.5, 656.5) translate(0.5, 0.5)"><foreignObject style="overflow:visible;" pointer-events="all" width="67" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" id="svg-fsmoub6z__svg_72"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 68px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host2, data1</div></div></foreignObject><text x="34" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" id="svg-fsmoub6z__svg_73">host2, data1</text></switch></g><rect x="650.892156869173" y="634.5" width="140" height="30" rx="4.5" ry="4.5" fill="#fff2cc" stroke="#d6b656" pointer-events="none" id="svg-fsmoub6z__svg_74" class=""/><g id="svg-fsmoub6z__svg_75" class=""><switch transform="translate(0.392157) translate(686.5, 642.5) translate(0.5, 0.5)"><foreignObject style="overflow:visible;" pointer-events="all" width="67" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" id="svg-fsmoub6z__svg_76"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 68px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host3, data1</div></div></foreignObject><text x="34" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" id="svg-fsmoub6z__svg_77">host3, data1</text></switch></g><rect x="120.89215686917305" y="80.5" width="180" height="271" rx="27" ry="27" fill="none" stroke="#000000" pointer-events="none" id="svg-fsmoub6z__svg_78" class=""/><g id="svg-fsmoub6z__svg_79" class=""><switch transform="translate(0.392157) translate(189.5, 63.5) translate(0.5, 0.5)"><foreignObject style="overflow:visible;" pointer-events="all" width="41" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" id="svg-fsmoub6z__svg_80"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 42px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Table 1</div></div></foreignObject><text x="21" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" id="svg-fsmoub6z__svg_81">Table 1</text></switch></g><rect x="430.89215686917305" y="29.5" width="180" height="372" rx="27" ry="27" fill="none" stroke="#000000" pointer-events="none" id="svg-fsmoub6z__svg_82" class=""/><g id="svg-fsmoub6z__svg_83" class=""><switch transform="translate(0.392157) translate(499.5, 12.5) translate(0.5, 0.5)"><foreignObject style="overflow:visible;" pointer-events="all" width="41" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" id="svg-fsmoub6z__svg_84"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 42px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Table 2</div></div></foreignObject><text x="21" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" id="svg-fsmoub6z__svg_85">Table 2</text></switch></g><rect x="10.89215686917305" y="610.5" width="180" height="190" rx="27" ry="27" fill="none" stroke="#000000" pointer-events="none" id="svg-fsmoub6z__svg_86" class=""/><g id="svg-fsmoub6z__svg_87" class=""><switch transform="translate(0.392157) translate(84.5, 593.5) translate(0.5, 0.5)"><foreignObject style="overflow:visible;" pointer-events="all" width="30" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" id="svg-fsmoub6z__svg_88"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 31px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Job 1</div></div></foreignObject><text x="15" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" id="svg-fsmoub6z__svg_89">Job 1</text></switch></g><rect x="430.89215686917305" y="610.5" width="180" height="190" rx="27" ry="27" fill="none" stroke="#000000" pointer-events="none" id="svg-fsmoub6z__svg_90" class=""/><g id="svg-fsmoub6z__svg_91" class=""><switch transform="translate(0.392157) translate(504.5, 593.5) translate(0.5, 0.5)"><foreignObject style="overflow:visible;" pointer-events="all" width="30" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" id="svg-fsmoub6z__svg_92"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 31px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Job 3</div></div></foreignObject><text x="15" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" id="svg-fsmoub6z__svg_93">Job 3</text></switch></g><rect x="630.892156869173" y="610.5" width="180" height="190" rx="27" ry="27" fill="none" stroke="#000000" pointer-events="none" id="svg-fsmoub6z__svg_94" class=""/><g id="svg-fsmoub6z__svg_95" class=""><switch transform="translate(0.392157) translate(704.5, 593.5) translate(0.5, 0.5)"><foreignObject style="overflow:visible;" pointer-events="all" width="30" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" id="svg-fsmoub6z__svg_96"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 31px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Job 4</div></div></foreignObject><text x="15" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" id="svg-fsmoub6z__svg_97">Job 4</text></switch></g><path d="M100.89215686917305,481.5 L180.89215686917305,481.5 L180.89215686917305,460.5 L200.89215686917305,490.5 L180.89215686917305,520.5 L180.89215686917305,499.5 L100.89215686917305,499.5 z" fill="none" stroke="#000000" stroke-miterlimit="10" transform="rotate(90, 150.892, 490.5)" pointer-events="none" id="svg-fsmoub6z__svg_98" class=""/><path d="M180.89215686917305,481.5 L260.89215686917305,481.5 L260.89215686917305,460.5 L280.89215686917305,490.5 L260.89215686917305,520.5 L260.89215686917305,499.5 L180.89215686917305,499.5 z" fill="none" stroke="#000000" stroke-miterlimit="10" transform="rotate(90, 230.892, 490.5)" pointer-events="none" id="svg-fsmoub6z__svg_99" class=""/><path d="M620.892156869173,471.5 L700.892156869173,471.5 L700.892156869173,450.5 L720.892156869173,480.5 L700.892156869173,510.5 L700.892156869173,489.5 L620.892156869173,489.5 z" fill="none" stroke="#000000" stroke-miterlimit="10" transform="rotate(90, 670.892, 480.5)" pointer-events="none" id="svg-fsmoub6z__svg_100" class=""/><rect x="240.89215686917305" y="646.5" width="140" height="30" rx="4.5" ry="4.5" fill="#fff2cc" stroke="#d6b656" pointer-events="none" id="svg-fsmoub6z__svg_101" class=""/><g id="svg-fsmoub6z__svg_102" class=""><switch transform="translate(0.392157) translate(276.5, 654.5) translate(0.5, 0.5)"><foreignObject style="overflow:visible;" pointer-events="all" width="67" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" id="svg-fsmoub6z__svg_103"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 68px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host1, data1</div></div></foreignObject><text x="34" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" id="svg-fsmoub6z__svg_104">host1, data1</text></switch></g><rect x="240.89215686917305" y="695.5" width="140" height="30" rx="4.5" ry="4.5" fill="#d5e8d4" stroke="#82b366" pointer-events="none" id="svg-fsmoub6z__svg_105" class=""/><g id="svg-fsmoub6z__svg_106" class=""><switch transform="translate(0.392157) translate(281.5, 703.5) translate(0.5, 0.5)"><foreignObject style="overflow:visible;" pointer-events="all" width="57" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" id="svg-fsmoub6z__svg_107"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 58px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host1, url3</div></div></foreignObject><text x="29" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" id="svg-fsmoub6z__svg_108">host1, url3</text></switch></g><rect x="240.89215686917305" y="738.5" width="140" height="30" rx="4.5" ry="4.5" fill="#d5e8d4" stroke="#82b366" pointer-events="none" id="svg-fsmoub6z__svg_109" class=""/><g id="svg-fsmoub6z__svg_110" class=""><switch transform="translate(0.392157) translate(281.5, 746.5) translate(0.5, 0.5)"><foreignObject style="overflow:visible;" pointer-events="all" width="57" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" id="svg-fsmoub6z__svg_111"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 58px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">host1, url4</div></div></foreignObject><text x="29" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" id="svg-fsmoub6z__svg_112">host1, url4</text></switch></g><rect x="220.89215686917305" y="610.5" width="180" height="190" rx="27" ry="27" fill="none" stroke="#000000" pointer-events="none" id="svg-fsmoub6z__svg_113" class=""/><g id="svg-fsmoub6z__svg_114" class=""><switch transform="translate(0.392157) translate(294.5, 593.5) translate(0.5, 0.5)"><foreignObject style="overflow:visible;" pointer-events="all" width="30" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" id="svg-fsmoub6z__svg_115"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 31px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Job 2</div></div></foreignObject><text x="15" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" id="svg-fsmoub6z__svg_116">Job 2</text></switch></g><path d="M530.892156869173,471.5 L610.892156869173,471.5 L610.892156869173,450.5 L630.892156869173,480.5 L610.892156869173,510.5 L610.892156869173,489.5 L530.892156869173,489.5 z" fill="none" stroke="#000000" stroke-miterlimit="10" transform="rotate(90, 580.892, 480.5)" pointer-events="none" id="svg-fsmoub6z__svg_117" class=""/><path d="M235.89215686917305,655.5 L215.89215686917305,655.5 Q205.89215686917305,655.5 205.89215686917305,665.5 L205.89215686917305,840.5 Q205.89215686917305,850.5 195.89215686917305,850.5 L185.89215686917305,850.5 Q175.89215686917305,850.5 185.89215686917305,850.5 L195.89215686917305,850.5 Q205.89215686917305,850.5 205.89215686917305,860.5 L205.89215686917305,1035.5 Q205.89215686917305,1045.5 215.89215686917305,1045.5 L235.89215686917305,1045.5 " fill="none" stroke="#000000" stroke-miterlimit="10" transform="rotate(270, 205.892, 850.5)" pointer-events="none" id="svg-fsmoub6z__svg_121" class=""/><g id="svg-fsmoub6z__svg_122" class=""><switch transform="translate(0.392157) translate(0.5, 887.5) translate(0.5, 0.5)"><foreignObject style="overflow:visible;" pointer-events="all" width="398" height="44" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" id="svg-fsmoub6z__svg_123"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 19px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 398px; white-space: normal; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Урлы с одного хоста теперь обрабатываются несколькими джобами</div></div></foreignObject><text x="199" y="32" fill="#000000" text-anchor="middle" font-size="19px" font-family="Helvetica" id="svg-fsmoub6z__svg_124">Урлы с одного хоста теперь обрабатываются несколькими джобами</text></switch></g><path d="M110.89215686917305,30.5 L137.80216053128242,78.93000030517578 " fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none" id="svg-fsmoub6z__svg_125" class=""/><path d="M140.35216358304024,83.5199966430664 L133.89215686917305,79.0999984741211 L137.80216053128242,78.93000030517578 L140.01215198636055,75.69999694824219 z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none" id="svg-fsmoub6z__svg_126" class=""/><g id="svg-fsmoub6z__svg_127" class=""><switch transform="translate(0.392157) translate(40.5, 1.5) translate(0.5, 0.5)"><foreignObject style="overflow:visible;" pointer-events="all" width="138" height="27" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" id="svg-fsmoub6z__svg_128"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 138px; white-space: normal; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Эту таблицу отмечаем как foreign</div></div></foreignObject><text x="69" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" id="svg-fsmoub6z__svg_129">Эту таблицу отмечаем как foreign</text></switch></g><foreignObject fill="#000000" stroke="#000000" style="color: rgb(0, 0, 0); text-align: center;" stroke-dashoffset="" fill-rule="nonzero" font-size="31" font-family="Georgia, serif" letter-spacing="0" word-spacing="0" marker-start="" marker-mid="" marker-end="" id="svg-fsmoub6z__svg_1" x="334.21568975005687" y="453.72548082235807" width="116.66665315600298" height="38.196080757139356" class=""><p xmlns="http://www.w3.org/1999/xhtml" style="border: none;outline: none;font-size: inherit;line-height: 1em;padding:0;margin:0;">Reduce<br style="border: none;outline: none;font-size: inherit;line-height: 1em;padding:0;margin:0;"/></p></foreignObject><foreignObject fill="#000000" stroke="#000000" style="color: rgb(0, 0, 0); text-align: justify;" stroke-dashoffset="" fill-rule="nonzero" font-size="13" font-family="Georgia, serif" letter-spacing="0" word-spacing="0" marker-start="" marker-mid="" marker-end="" id="svg-fsmoub6z__svg_132" x="312.84313927828043" y="491.4313743118296" width="170.09801230186167" height="25.980393048684828" class=""><p xmlns="http://www.w3.org/1999/xhtml" style="border: none;outline: none;font-size: inherit;line-height: 1em;padding:0;margin:0;">enable_key_guarantee=false</p></foreignObject></g></svg>

Пример лежит в [yt/cpp/mapreduce/examples/tutorial/join_reduce_tnode](https://github.com/ytsaurus/ytsaurus/tree/main/yt/cpp/mapreduce/examples/tutorial/join_reduce_tnode).

{% code '/yt/cpp/mapreduce/examples/tutorial/join_reduce_tnode/main.cpp' lang='c++' %}

### Пакетные запросы

Есть возможность исполнять «лёгкие» запросы (создать/удалить таблицу, проверить её существование и т.д. ) пачками. Этот способ стоит использовать, если нужно выполнить большое количество однотипных операций. Пакетные (batch) запросы помогут заметно сэкономить время.

Пример лежит в [yt/cpp/mapreduce/examples/tutorial/batch_request](https://github.com/ytsaurus/ytsaurus/tree/main/yt/cpp/mapreduce/examples/tutorial/batch_request).

{% code '/yt/cpp/mapreduce/examples/tutorial/batch_request/main.cpp' lang='c++' %}

### Доставка дампа таблицы в джоб в виде файла

В YTsaurus в джоб можно доставлять файлы (как, например, описано [ранее](#map-tnode-with-file)). Менее известной возможностью является доставка дампа таблицы в джоб. Это может быть удобно, если джобу требуется словарь, хранящийся в небольшой (едининичные гигабайты) таблице. Однако не стоит использовать этот подход для загрузки больших таблиц — если размер таблицы несколько десятков гигабайт, такая таблица не поместится на одном узле кластера, на котором запускаются джобы.

Пример лежит в [yt/cpp/mapreduce/examples/tutorial/pass_table_as_file](https://github.com/ytsaurus/ytsaurus/tree/main/yt/cpp/mapreduce/examples/tutorial/pass_table_as_file).

{% code '/yt/cpp/mapreduce/examples/tutorial/pass_table_as_file/main.cpp' lang='c++' %}

### Запись и получение job statistics

Во время работы операция накапливает множество статистик (читайте [документацию](https://ytsaurus.tech/docs/ru/user-guide/problems/jobstatistics.md)).

Пример на простой Map со сбором статистик: [yt/cpp/mapreduce/examples/tutorial/job_statistics](https://github.com/ytsaurus/ytsaurus/tree/main/yt/cpp/mapreduce/examples/tutorial/job_statistics):

{% code '/yt/cpp/mapreduce/examples/tutorial/job_statistics/main.cpp' lang='c++' %}

### Базовая работа с динамическими таблицами

YTsaurus поддерживает [динамические таблицы](https://ytsaurus.tech/docs/ru/user-guide/dynamic-tables/overview.md). Wrapper С++ предоставляет возможность совершать базовые операции с такими таблицами.

{% note warning "Внимание" %}

В отличие от других примеров, для запуска этого примера придётся совершить некоторые дополнительные действия:

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

{% endnote %}

Пример лежит в [yt/cpp/mapreduce/examples/tutorial/dyntable_get_insert](https://github.com/ytsaurus/ytsaurus/tree/main/yt/cpp/mapreduce/examples/tutorial/dyntable_get_insert).

{% code '/yt/cpp/mapreduce/examples/tutorial/dyntable_get_insert/main.cpp' lang='c++' %}
<!-- endsource: ru/_includes/api/cpp/examples.md -->