Перейти к содержимому
Главная страница » Запуск ClickHouse в Docker за 1 минуту

Запуск ClickHouse в Docker за 1 минуту

Если вам нужно быстро развернуть 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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *