Если вам нужно быстро развернуть ClickHouse в любой среде, то вы попали по адресу.
ClickHouse — это высокопроизводительная реляционная OLAP-система управления базами данных с открытым исходным кодом для аналитики в реальном времени с использованием SQL.
Docker — это программная платформа, позволяющая разработчикам быстро создавать, тестировать и развертывать приложения. Docker упаковывает программное обеспечение в контейнер, абстрагирующийся от базовой операционную систему.
Установка ClickHouse в Docker
Установите docker, прежде чем продолжить.
1. Извлекаем образ ClickHouse
Для начала работы вам нужно загрузить официальный образ ClickHouse с Docker Hub. Это можно сделать с помощью Docker CLI:
1 |
docker pull clickhouse/clickhouse-server |
Эта команда загружает образ ClickHouse, который затем можно использовать для создания контейнеров.
Мы рекомендуем установить последнюю версию с долгосрочной поддержкой (LTS). Например:
1 |
docker pull clickhouse/clickhouse-server:24.3.6 |
2. Запуск контейнера ClickHouse
После извлечения образа вы можете запустить сервер ClickHouse, используя базовую команду запуска Docker:
1 |
docker run -d --name clickhouse-server clickhouse/clickhouse-server |
Эта команда запускает сервер ClickHouse в автономном режиме, называя контейнер clickhouse-server
.
3. Запуск контейнера ClickHouse с дополнительными настройками
Для оптимизации производительности и обеспечения сохраняемости данных вы можете настроить несколько параметров и смонтировать необходимые тома:
1 2 3 4 5 6 7 8 9 10 |
docker run -d --name clickhouse-server \ --ulimit nofile=262144:262144 \ --volume=$(pwd)/data:/var/lib/clickhouse \ --volume=$(pwd)/logs:/var/log/clickhouse-server \ --network=host \ --cap-add=SYS_NICE \ --cap-add=NET_ADMIN \ --cap-add=IPC_LOCK \ --cap-add=SYS_PTRACE \ clickhouse/clickhouse-server:24.3.6 |
- ограничение: устанавливает максимальное количество открытых файлов.
- Тома: Монтирует каталоги для данных и журналов для обеспечения сохраняемости.
- Сеть: использование
-network=host
может повысить производительность. - (необязательно) Вы можете включить дополнительные функции ClickHouse, установив определенные возможности Linux:
SYS_PTRACE NET_ADMIN IPC_LOCK SYS_NICE
Запуск ClickHouse с помощью Docker Compose
Для более сложных настроек, таких как запуск кластера ClickHouse проще использовать Docker Compose, так как он является мощным инструментом.
Создайте папку для проекта:
1 |
mkdir dockerclickhouse |
Создайте docker-compose.yml файл со следующим содержимым:
Добавьте следующие строки под clickhouse-server
сервисом в вашем docker-compose.yml
файле, чтобы включить необходимые возможности:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
version: '3' services: clickhouse-server: image: clickhouse/clickhouse-server:24.3.6 container_name: clickhouse-server ulimits: nofile: soft: 262144 hard: 262144 volumes: - ./data:/var/lib/clickhouse - ./logs:/var/log/clickhouse-server network_mode: host cap_add: - SYS_NICE - NET_ADMIN - IPC_LOCK - SYS_PTRACE |
Выполните следующую команду, чтобы запустить службы, определенные в docker-compose.yml
файле:
1 |
docker-compose up -d |
Эта команда запустит сервер ClickHouse, в соответствии с файлом docker-compose.
Проверка установки
После запуска контейнера проверьте установку, войдя в клиент ClickHouse:
1 |
docker exec -it clickhouse-server clickhouse-client |
Затем вы можете запускать базовые SQL-запросы, чтобы убедиться, что все настроено правильно:
1 |
SELECT * FROM system.databases; |
В этом запросе перечислены все базы данных, доступные в ClickHouse.
Настройка и оптимизация
ClickHouse использует несколько файлов конфигурации для управления своими настройками:
config.xml: основной файл конфигурации для работы базы данных, механизмов хранения и обработки запросов. Вот пример config.xml
файла:
1 2 3 4 5 6 7 |
<clickhouse> <profiles> <default> <max_query_size>150000</max_query_size> </default> </profiles> </clickhouse> |
users.xml: Управляет доступом пользователей и разрешениями. Вот пример users.xml
файла:
1 2 3 4 5 6 7 8 |
<clickhouse> <users> <admin> <password_sha256_hex>8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918</password_sha256_hex> <access_management>1</access_management> </admin> </users> </clickhouse> |
Чтобы запустить контейнер ClickHouse с использованием пользовательских config.xml
и users.xml
конфигурационных файлов, вам необходимо смонтировать эти файлы в контейнер. Выполните следующие действия:
1. Поместите пользовательские файлы config.xml
и users.xml
в каталог на вашем компьютере, например, ./config
.
2. Используйте следующую команду запуска Docker, чтобы запустить сервер ClickHouse с этими пользовательскими файлами конфигурации:
1 2 3 4 5 6 7 8 9 10 11 12 |
docker run -d --name clickhouse-server \ --ulimit nofile=262144:262144 \ --volume=$(pwd)/data:/var/lib/clickhouse \ --volume=$(pwd)/logs:/var/log/clickhouse-server \ --volume=$(pwd)/config/config.xml:/etc/clickhouse-server/config.xml \ --volume=$(pwd)/config/users.xml:/etc/clickhouse-server/users.xml \ --network=host \ --cap-add=SYS_NICE \ --cap-add=NET_ADMIN \ --cap-add=IPC_LOCK \ --cap-add=SYS_PTRACE \ clickhouse/clickhouse-server:24.3.6 |
В этой команде:
- -volume=$(pwd)/config/config.xml:/etc/clickhouse-server/config.xml: Монтирует ваш пользовательский
config.xml
файл в контейнер. - -volume=$(pwd)/config/users.xml:/etc/clickhouse-server/users.xml: Монтирует ваш пользовательский
users.xml
файл в контейнер.
Вот эквивалентный docker-compose.yml
файл.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
version: '3' services: clickhouse-server: image: clickhouse/clickhouse-server:24.3.6 container_name: clickhouse-server ulimits: nofile: soft: 262144 hard: 262144 volumes: - ./data:/var/lib/clickhouse - ./logs:/var/log/clickhouse-server - ./config/config.xml:/etc/clickhouse-server/config.xml - ./config/users.xml:/etc/clickhouse-server/users.xml network_mode: host cap_add: - SYS_NICE - NET_ADMIN - IPC_LOCK - SYS_PTRACE |
Опять же, вы можете протестировать его с помощью следующей команды:
1 |
docker exec -it clickhouse-server clickhouse-client |
Подключение к ClickHouse с помощью Python
Мы не будем кодировать на REPL, поэтому давайте напишем немного кода. Официального драйвера Ruby нет, но есть Python. И несколько неофициальных драйверов Ruby.
1 |
$ pip3 install clickhouse-connect |
Нам также необходимо предоставить доступ к порту Clickhouse нашего контейнера Docker. Сначала давайте удалим старый порт (мы можем настроить его при запущенном контейнере, но это сложнее, и у нас все равно там нет никаких данных):
1 2 |
$ docker stop clickhouse-server $ docker rm clickhouse-server |
И запустите его с подключенным портом 8123:
1 |
$ docker run -p 8123:8123 -d --name clickhouse-server clickhouse/clickhouse-server |
Python Clickhouse FizzBuzz
Теперь мы можем написать некоторый код на Python для взаимодействия с нашей базой данных:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#!/usr/bin/env python3 import clickhouse_connect client = clickhouse_connect.get_client() query = """ select if(number % 15 = 0, 'FizzBuzz', if(number % 5 = 0, 'Buzz', if(number % 3 = 0, 'Fizz', toString(number)))) as FizzBuzz from system.numbers where number >= 1 limit 100 """ print(client.command(query)) |
Результатом client.command(query)
является многострочная строка, поэтому она в основном полезна для отладки.
Существуют и другие методы, которые возвращают более очевидные структуры данных, такие как список кортежей, а также фрейм данных Pandas и так далее.
Подключение к ClickHouse через DBeaver
Заключение
Вы только что запустили сервер ClickHouse с помощью docker, подключились к нему, создали пользователя, базу данных, таблицу и выполнили к ней несколько запросов. Вы также узнали, как подключиться к серверу ClickHouse с помощью клиента MySQL.
Перевод инструкции: Installing and running ClickHouse with Docker