ClickHouse — колоночная СУБД, предназначенная для решения задач аналитической обработки данных. Несмотя на то, что в большинстве случаев ClickHouse должен использоваться для работы в режиме множества серверов, объединенных в кластер, в случаях, когда объем обрабатываемых данных составляет 1-2 TB, он может обрабатываться и на одном сервере.
В этой статье мы рассмотрим как запустить сервер ClickHouse в виде приложения Docker, подходящего для обработки сравнительно небольших объемов данных на одном сервере.
Настройка Docker
Если у вас уже настроен и установлен Docker, просто пропустите этот шаг. Если Docker не установлен, установите его по одному из руководств: Ubuntu 16.04 и 18.04, Debian 9 и 10, Centos 7 и приступайте к следующему шагу.
Настройка ClickHouse
При установке ClickHouse мы будем использовать внешний конфигурационный файл и внешний каталог хранения данных для того, чтобы при перезапуске контейнера вся информация оставалась в сохранности. Сначала создадим необходимые каталоги, в которых будут храниться настройки, журналы и базы данных ClickHouse:
sudo mkdir -p /opt/clickhouse/{data,etc,log}
Теперь запустим ClickHouse в пробном режиме:
sudo docker run -d --name clickhouse_1 \ --ulimit nofile=262144:262144 \ -v /opt/clickhouse/log:/var/log/clickhouse-server \ -v /opt/clickhouse/data:/var/lib/clickhouse \ yandex/clickhouse-server
Убедимся, что соединение с сервером работает:
sudo docker run -it --rm --link clickhouse_1:clickhouse-server \ yandex/clickhouse-client --host clickhouse-server
Проверьте, что сервер отвечает на запросы:
SELECT now() ┌───────────────now()─┐ │ 2019-04-01 15:46:39 │ └─────────────────────┘ 1 rows in set. Elapsed: 0.003 sec. e29c32808cc4 :) select version(); SELECT version() ┌─version()─┐ │ 19.4.2.7 │ └───────────┘
Теперь выполним экспорт конфигурационных файлов сервера в каталог хоста, чтобы вы позже могли их изменять:
sudo docker exec -it clickhouse_1 cat /etc/clickhouse-server/config.xml > config.xml sudo docker exec -it clickhouse_1 cat /etc/clickhouse-server/users.xml > users.xml sudo mv config.xml users.xml
Теперь остановим сервер ClickHouse и запустим его с внешними файлами конфигурации:
sudo docker stop clickhouse_1 sudo docker rm clickhouse_1 sudo docker run -d --restart=always --name clickhouse_1 \ --ulimit nofile=262144:262144 \ -p 127.0.0.1:8123:8123 -p 127.0.0.1:9000:9000 \ -v /opt/clickhouse/log:/var/log/clickhouse-server \ -v /opt/clickhouse/data:/var/lib/clickhouse \ -v /opt/clickhouse/etc/users.xml:/etc/clickhouse-server/users.xml \ -v /opt/clickhouse/etc/config.xml:/etc/clickhouse-server/config.xml \ yandex/clickhouse-server
Проверьте доступность сервера как мы проверяли ранее:
sudo docker run -it --rm --link clickhouse_1:clickhouse-server \ yandex/clickhouse-client --host clickhouse-server
Проверьте, что сервер отвечает на запросы:
SELECT now() ┌───────────────now()─┐ │ 2019-04-01 15:46:39 │ └─────────────────────┘ 1 rows in set. Elapsed: 0.003 sec. e29c32808cc4 :) select version(); SELECT version() ┌─version()─┐ │ 19.4.2.7 │ └───────────┘
Все, на этом этапе у вас развернут сервер ClickHouse, подходящий для продуктового использования. Далее, мы приведем несколько полезных настроек, которые позволяют увеличить производительность ClickHouse. Однако, за полным их перечнем рекомендуем обратиться к документации продукта.
Дополнительная настройка ClickHouse
Рассмотрим две переменных ClickHouse, изменение которых положительно влияет на производительность выполнения запросов:
- mark_cache_size — размер кэша, используемый для выполнения запросов, рекомендуем подбирать от размера RAM;
- max_memory_usage — максимальный размер памяти, который может использовать ClickHouse, рекомендуем выделять как можно больше, в зависимости от доступной памяти на сервере.
Заключение
Вы научились устанавливать CllickHouse в режиме Docker с использованием внешних каталогов для хранения настроек, данных и журналов в пространстве хост-системы. Эта конфигурация может использоваться как для нужд разработки, как аналитическое хранилище небольшого объема или как узел многоузловой конфигурации.