Если вам нужно быстро развернуть ClickHouse в любой среде, то вы попали по адресу.
ClickHouse — это высокопроизводительная реляционная OLAP-система управления базами данных с открытым исходным кодом для аналитики в реальном времени с использованием SQL.
Docker — это программная платформа, позволяющая разработчикам быстро создавать, тестировать и развертывать приложения. Docker упаковывает программное обеспечение в контейнер, абстрагирующийся от базовой операционную систему.
Установка ClickHouse в Docker
Установите docker, прежде чем продолжить.
1. Извлекаем образ ClickHouse
Для начала работы вам нужно загрузить официальный образ ClickHouse с Docker Hub. Это можно сделать с помощью Docker CLI:
docker pull clickhouse/clickhouse-server
Эта команда загружает образ ClickHouse, который затем можно использовать для создания контейнеров.
Мы рекомендуем установить последнюю версию с долгосрочной поддержкой (LTS). Например:
docker pull clickhouse/clickhouse-server:24.3.6
2. Запуск контейнера ClickHouse
После извлечения образа вы можете запустить сервер ClickHouse, используя базовую команду запуска Docker:
docker run -d --name clickhouse-server clickhouse/clickhouse-server
Эта команда запускает сервер ClickHouse в автономном режиме, называя контейнер clickhouse-server
.
3. Запуск контейнера ClickHouse с дополнительными настройками
Для оптимизации производительности и обеспечения сохраняемости данных вы можете настроить несколько параметров и смонтировать необходимые тома:
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, так как он является мощным инструментом.
Создайте папку для проекта:
mkdir dockerclickhouse
Создайте docker-compose.yml файл со следующим содержимым:
Добавьте следующие строки под clickhouse-server
сервисом в вашем docker-compose.yml
файле, чтобы включить необходимые возможности:
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
файле:
docker-compose up -d
Эта команда запустит сервер ClickHouse, в соответствии с файлом docker-compose.
Проверка установки
После запуска контейнера проверьте установку, войдя в клиент ClickHouse:
docker exec -it clickhouse-server clickhouse-client
Затем вы можете запускать базовые SQL-запросы, чтобы убедиться, что все настроено правильно:
SELECT * FROM system.databases;
В этом запросе перечислены все базы данных, доступные в ClickHouse.
Настройка и оптимизация
ClickHouse использует несколько файлов конфигурации для управления своими настройками:
config.xml: основной файл конфигурации для работы базы данных, механизмов хранения и обработки запросов. Вот пример config.xml
файла:
<clickhouse>
<profiles>
<default>
<max_query_size>150000</max_query_size>
</default>
</profiles>
</clickhouse>
users.xml: Управляет доступом пользователей и разрешениями. Вот пример users.xml
файла:
<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 с этими пользовательскими файлами конфигурации:
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
файл.
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
Опять же, вы можете протестировать его с помощью следующей команды:
docker exec -it clickhouse-server clickhouse-client
Подключение к ClickHouse с помощью Python
Мы не будем кодировать на REPL, поэтому давайте напишем немного кода. Официального драйвера Ruby нет, но есть Python. И несколько неофициальных драйверов Ruby.
$ pip3 install clickhouse-connect
Нам также необходимо предоставить доступ к порту Clickhouse нашего контейнера Docker. Сначала давайте удалим старый порт (мы можем настроить его при запущенном контейнере, но это сложнее, и у нас все равно там нет никаких данных):
$ docker stop clickhouse-server
$ docker rm clickhouse-server
И запустите его с подключенным портом 8123:
$ docker run -p 8123:8123 -d --name clickhouse-server clickhouse/clickhouse-server
Python Clickhouse FizzBuzz
Теперь мы можем написать некоторый код на Python для взаимодействия с нашей базой данных:
#!/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