Конфигурация клики
Вся конфигурация клики описывается одним YSON-документом, называемым спеклет (speclet).
Спеклет клики хранится в Кипарисе по пути //sys/strawberry/chyt/<alias>/speclet. Также его содержимое можно посмотреть в веб-интерфейсе на вкладке Speclet или получить с помощью команды CLI yt clickhouse ctl get-speclet.
Спеклет представляет собой набор опций, которые интерпретируются контроллером во время запуска клики. В частности, на основе данных опций контроллер генерирует конечную конфигурацию CHYT-инстансов.
Важным отличием CHYT от оригинального ClickHouse является то, что настройки задаются не в XML-формате, а в родном для системы YTsaurus YSON-формате. Ниже описан принцип, по которому интерпретируются настройки в таком формате.
Как формируется конфигурация
При составлении конфигурации используется следующая информация:
- Базовый конфиг из Кипариса
//sys/clickhouse/config. - Опции, описанные в спеклете.
- Конфигурация нативного подключения к кластеру, которая берётся из содержимого
//sys/@cluster_connection.
Внимание
Все инстансы клики всегда работают с одной и той же конфигурацией. Поменять конфигурацию без перезапуска клики невозможно.
Продвинутая конфигурация YTsaurus-части инстанса
YTsaurus-часть конфигурации инстанса живёт в опции yt_config. Через данную опцию можно задать продвинутые настройки, которые не вынесены в отдельные опции спеклета. Поддерживаются следующие подопции:
-
settings— CHYT-специфичные настройки запросов по умолчанию. Изменение настройки в данном разделе приводит к изменению значения по умолчанию для этой настройки для всех запросов в клике. -
table_writer— конфигурация Table Writer. -
table_attribute_cache— конфигурация кеша атрибутов таблиц. Данный кеш существенно повышает отзывчивость CHYT, но на текущий момент потенциально может приводить к неконсистентным чтениям (в таблице данные уже появились, а CHYT их еще не видит). Чтобы отключить данный кеш, можно воспользоваться конфигурацией:{read_from=follower;expire_after_successful_update_time=0;expire_after_failed_update_time=0;refresh_time=0;expire_after_access_time=0} -
create_table_default_attributes[{optimize_for = scan}] — атрибуты по умолчанию, с которыми будут создаваться таблицы приCREATE-запросах в CHYT. -
health_checker— конфигурация Health Checker. Состоит из 3 полей:—
queries[["select * from `//sys/clickhouse/sample_table`"]] — список тестовых запросов, работоспособность которых будет регулярно проверяться.Внимание
Запросы от Health Checker на данный момент исполняются от имени пользователя
yt-clickhouse, который должен иметь праваreadна доступ к таблице.—
period[60000] — период срабатывания проверки в миллисекундах.—
timeout[0.9 * period / len(queries)] — таймаут на срабатывание каждого из сконфигурированных запросов. Если запрос не укладывается в таймаут, он считаетсяfailed. -
subquery— конфигурация основной части системы, которая координирует исполнение ClickHouse-запросов поверх таблиц YTsaurus. Перед конфигурированием этой части прочитайте статью об исполнении запроса внутри клики.—
min_data_weight_per_thread[64 MiB] — (в байтах) при нарезании входа на подзапросы координатор будет пытаться выдать на каждое ядро каждого инстанса не меньше, чем заданный объем.—
max_data_weight_per_subquery[50 GiB] — (в байтах) максимальный допустимый объем данных, обрабатываемый на одном ядре одного инстанса. Данное ограничение является защитным и защищает пользователей клики от случайного запуска огромного запроса, обрабатывающего петабайты. Константа 50 GiB выбрана из соображения, что такой объем обрабатывается на одном ядре примерно за десятки минут. -
show_tables— конфигурация поведения запросаSHOW TABLES. Позволяет настроить список директорий, в которыхSHOW TABLESбудет показывать список таблиц.—
roots— список YPath-путей директорий в Кипарисе, из которых будут собираться таблицы для показа поSHOW TABLES.
Внимание
Ограничение на max_data_weight_per_subquery использует поколоночные статистики для учета колоночной выборки из обрабатываемых таблиц. Поколоночная статистика может отсутствовать для старых таблиц, созданных до ее появления. Для таких таблиц поколоночность в ограничении не учитывается. Это означает, что при обработке очень узкого среза колонок, образующего 1% от общего объема таблицы и составляющего 1 GiB в пересчете на ядро, CHYT посчитает, что обрабатывается 100 GiB на ядро. CHYT не запустит такой запрос с настройками по умолчанию.
Если необходим именно такой сценарий, либо необходимо обрабатывать большие объемы данных, стоит выставить эту настройку в произвольно большее значение.
Продвинутая конфигурация ClickHouse-части инстанса
Для настройки конфигурации ClickHouse-части предназначена опция clickhouse_config. Задавать эту опцию необходимо таким образом, чтобы она соответствовала стандартной XML конфигурации ClickHouse.
Правила преобразования XML конфигурации ClickHouse в YSON конфигурацию CHYT можно описать следующим образом:
- Любой не множественный по смыслу в конфигурации ClickHouse узел конфигурации является словарем (
map). - Множественный узел представлен списком (
list).
Ниже представлен пример преобразования искусственной XML конфигурации в YSON конфигурацию:
<foo>42</foo>
<bar>qwe</bar>
<baz>
<quux>3.14</quux>
</baz>
<baz></baz>
<baz>hi!</baz>
{
foo = 42;
bar = "qwe";
baz = [
{quux = 3.14};
{};
"hi!";
];
}
Отметим подопции clickhouse_config, которые могут оказаться удобны в CHYT:
dictionaries([]) — конфигурация внешних словарей. Значением должен быть список конфигураций словарей. Каждый словарь конфигурируется map'ом со следующими полями, сохраняющими смысл оригинальной конфигурации ClickHouse:name— имя внешнего словаря;source— источник данных для внешнего словаря;layout— представление внешнего словаря в памяти инстанса;structure— схема данных, хранящихся в словаре;lifetime— время жизни словаря.
Внешние словари
CHYT поддерживает все настройки layout, structure и lifetime обычного ClickHouse.
Примечание
В качестве source можно указывать источники от оригинального ClickHouse, но их работоспособность не гарантируется. В частности, источники, требующие сетевого взаимодействия, технически должны работать, но на практике могут столкнуться с отсутствием сетевых доступов.
Также есть дополнительный тип источника данных, в котором можно использовать статические таблицы в YTsaurus. Данный тип называется yt и имеет один параметр:
path— путь к статической таблице на кластере, которая будет служить источником данных для словаря.
В качестве примера подключения YTsaurus таблицы как внешнего словаря ClickHouse можно посмотреть на:
- Пример конфигурации CHYT, подключающий данную таблицу как внешний словарь ClickHouse.
- Пример использования внешнего словаря в запросах:
select dictGet('OS', 'OS', toUInt64(38)) as os_name,
dictGetHierarchy('OS', toUInt64(38)) as hierarchy,
dictGetChildren('OS', toUInt64(101)) as children
Пример конфигурации
Ниже приведен пример полной конфигурации, которую можно указать c помощью команды set-speclet.
{
instance_count = 1;
query_settings = {
extremes = 1;
};
yt_config = {
subquery = {
max_data_weight_per_subquery = 1000000000000;
};
};
clickhouse_config = {
dictionaries = [
{
name = OS;
layout = {flat = {}};
structure = {
id = {name = Id};
attribute = [
{
name = "OS";
type = "Nullable(String)";
null_value = "NULL";
};
{
name = "ParentId";
type = "Nullable(UInt64)";
null_value = "NULL";
hierarchical = %true;
};
{
name = "RootId";
type = "Nullable(UInt64)";
null_value = "NULL";
};
];
};
lifetime = 0;
source = {yt = {path = "//sys/clickhouse/dictionaries/OS"}};
};
];
};
}