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

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

Вы можете увеличить скорость обработки 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 для существующих моделей менять ничего не нужно, функционал привязки сохранится как было ранее за счет миграций.


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

Загрузка данных с помощью JDBC

 

Related content