Ускорение загрузки данных

Ускорение загрузки данных

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

  1. Добавьте в Docker Swarm все используемые для загрузки сервера. Для этого необходимо сделать следующее:

    • на главном сервере выполните следующую команду для получения токена соединения для рабочих узлов:

      docker swarm join-token worker
    • на остальных серверах, для добавления рабочего узла, выполните команду с полученным токеном. Например:

      docker swarm join \ --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \ 192.168.99.100:2377
    • убедитесь, что в Swarm указано нужное количество узлов:

      docker node ls
  2. Выполните скрипт /var/lib/visiology/scripts/v3/utils/make_ch_fast_loading.sh
    Данный скрипт автоматически выполнит необходимые шаги, которые вы также можете повторить, если требуется ручная настройка.

1. Добавьте метки на каждый узел, начиная с главного. Обратите внимание, что цифра после v3-clickhouse меняется:

  • docker node update --label-add=v3-clickhouse-1=true WORKER_NODE_ID_1

  • docker node update --label-add=v3-clickhouse-2=true WORKER_NODE_ID_2

  • docker node update --label-add=v3-clickhouse-3=true WORKER_NODE_ID_3

  • docker node update --label-add=monitoring-v3=true WORKER_NODE_ID_2

  • docker node update --label-add=monitoring-v3=true WORKER_NODE_ID_3

Идентификаторы узлов (WORKER_NODE_ID_…) можно получить с помощью следующей команды:

docker inspect -f "{{.ID}} {{.Status.Addr}} {{.Spec.Labels}}" $(docker node ls -q)

2. В файле /var/lib/visiology/scripts/v3/defaults.env измените количество узлов CLICKHOUSE_COUNT

3. В папке/var/lib/visiology/scripts/v3/extended-services создайте копии файла /var/lib/visiology/scripts/v3/visiology3-ch-1.yml в количестве, равном количеству узлов (..-ch-2.yml,..-ch-3.yml и т.д. , вместо [..] порядковый номер файла в папке)

В копиях измените node.labels.v3-clickhouse-1 (строка 15), clickhouse-1 (строка 28), JDBC_BRIDGE_HOST_1 (строка 59), SERVER_ID:1 (строка 60), v3-clickhouse-1 (строка 70), , jdbc-bridge-1 (строка 75), v3-jdbc-bridge-1 (строка 84) в соответствие с номером сервера , обозначенном в имени файла [..-ch-НОМЕР].

4. Внесите изменения в файл /var/lib/visiology/scripts/v3/custom-configs/cluster-formula-engine.json:

{ "ClickHouseSettings": { "Nodes": { "clickhouse1": { "ConnectionString": "Compression=True;CheckCompressedHash=False;Compressor=lz4;Host={{ env "CLICKHOUSE_HOST_1" }};Port={{ env "CLICKHOUSE_PORT" }};Username={{ secret "CLICKHOUSE_FE_USER" }};Password={{ secret "CLICKHOUSE_FE_PASSWORD" }};Database={{ env "CLICKHOUSE_DB" }};UseSession=true;Timeout=120;set_max_execution_time=120;set_cancel_http_readonly_queries_on_client_close=1;set_timeout_before_checking_execution_speed=30;", "TcpPort": "9000" }, "clickhouse2": { "ConnectionString": "Compression=True;CheckCompressedHash=False;Compressor=lz4;Host={{ env "CLICKHOUSE_HOST_2" }};Port={{ env "CLICKHOUSE_PORT" }};Username={{ secret "CLICKHOUSE_FE_USER" }};Password={{ secret "CLICKHOUSE_FE_PASSWORD" }};Database={{ env "CLICKHOUSE_DB" }};UseSession=true;Timeout=120;set_max_execution_time=120;set_cancel_http_readonly_queries_on_client_close=1;set_timeout_before_checking_execution_speed=30;", "TcpPort": "9000" }, ... } "EtlNodes": ["clickhouse1", ...], "QueryNodes": ["clickhouse1", ...], "ReplicationEnabled": false, "TargetReplicaNodesCount": 1, "ConfirmationReplicaNodesCount": 1 } }


В каждой строке с "ConnectionString" нужно заменить цифру на соответствующую в части Host={{ env "CLICKHOUSE_HOST_1" }}

5. Внесите изменения в файл /var/lib/visiology/scripts/v3/defaults.env:

  • добавьте строки:
    CLICKHOUSE_HOST_2=clickhouse-2
    CLICKHOUSE_HOST_3=clickhouse-3
    и т.д.

  • добавьте строки:
    JDBC_BRIDGE_HOST_2=jdbc-bridge-2
    JDBC_BRIDGE_HOST_3=jdbc-bridge-3
    и т.д.

6. В файле /var/lib/visiology/scripts/v3/env-files/fe.env измените значения RefreshDataJob__ParallelWorkers и Hangfire__WorkerCount на количество узлов с базой данных Clickhouse, умноженное на 2, т.е. для четырех узлов с базой Clickhouse требуется указать значение 8.

7. Создайте файл /var/lib/visiology/scripts/v3/extended-services/ПОРЯДКОВЫЙ_НОМЕР-backup-service.yml:

version: "3.8" services: backup-service: environment: CLICKHOUSE_HOSTS: ${CLICKHOUSE_HOST_1} ${CLICKHOUSE_HOST_2} ...

поле CLICKHOUSE_HOSTS перечисляет все переменные CLICKHOUSE_HOST_.. из /var/lib/visiology/scripts/v3/defaults.env

  1. Загрузите образы clickhouse, jdbc-bridge, cadvisor, node-exporter, promtail в память докера на каждом сервере.

  2. Запустите платформу.

Изменение сервера ClickHouse для набора данных

Ранее в Visiology 3 (до версии 3.9) существовало API для изменения привязки “набор данных ↔︎ ClickHouse-сервер”. Т.е. можно было хранить разные наборы данных на разных ClickHouse-серверах.

Начиная с версии 3.9, произошли небольшие изменения в API и логики для новых наборов данных.

image-20240827-062400.png

Изменения в API

  1. Метод получения serverKey теперь возвращает массив строк, а не простую строку. Например:

image-20240827-062532.png
  1. Метод подмены serverKey теперь принимает массив строк, а не простую строку. Например:

image-20240827-062711.png

Изменения в метаданных набора данных

  1. Свойство ServerKey, которое отвечало за сопоставление “набор данных ↔︎ ClickHouse-сервер” было удалено. Теперь функционал поддержки привязки наборов данных к ClickHouse-серверам работает немного другим образом (см. ниже). Для существующих моделей реализованы миграции и поведение остается прежним.

  2. Появилось новое свойство ServerSelectionType (число), допускающего значения:

    • Static (1)

    • Dynamic (2) - является значением по умолчанию при создании набора данных.

  3. Появилось новое свойство ActiveServerKeys (массив строк).
    Если в наборе данных ServerSelectionType = Dynamic, то при загрузке данных ClickHouse-сервер выбирается платформой автоматически.
    После загрузки данных всегда записывается значение в поле ActiveServerKeys, т.к. оно в последующем используется для осуществления DAX-запросов.

  4. Появилось новое свойство TargetServerKeys (массив строк).
    Если в наборе данных ServerSelectionType = Static, то при загрузке данных ClickHouse сервер выбирается из поля TargetServerKeys.

Настройка ClickHouse-сервера для набора данных

Для новых моделей

При создании нового набора данных через UI полю ServerSelectionType назначается значение Dynamic, что означает автоматическое определение ClickHouse-сервера.

Поэтому, если вы создаете новую модель данных и хотите использовать функционал привязки ClickHouse-серверов к набору данных, то необходимо изменить значение свойства ServerSelectionType на Static и привязать конкретный ключ сервера через метод API по уже знакомому методу.

Пример запроса на изменение ServerSelectionType у набора данных:

image-20240827-071258.png

Для старых моделей

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


Смотрите также

Загрузка данных из базы данных