Home » Как установить и использовать ClickHouse на Ubuntu 24
Как установить и использовать ClickHouse на Ubuntu 24

Как установить и использовать ClickHouse на Ubuntu 24

Привет, дорогой читатель! Если ты имеешь дело с аналитикой данных, то наверняка уже сталкивался с вопросом выбора базы данных для больших объемов информации. Сегодня мы разберем установку и настройку ClickHouse на Ubuntu 24 — мощной колоночной СУБД от команды Yandex, которая покорила сердца многих DevOps-инженеров и аналитиков данных. В этой статье я покажу, как быстро развернуть ClickHouse, настроить его под свои нужды и начать работать с данными. Мы разберем все подводные камни, которые могут встретиться на пути, и я поделюсь практическими советами из реального опыта.

Что такое ClickHouse и почему он так популярен?

ClickHouse — это open-source колоночная система управления базами данных (OLAP), разработанная в Yandex специально для обработки больших объемов данных в реальном времени. Основная фишка в том, что данные хранятся по столбцам, а не по строкам, что делает аналитические запросы невероятно быстрыми.

Основные преимущества:

  • Скорость обработки запросов — в разы быстрее MySQL/PostgreSQL для аналитики
  • Отличная компрессия данных (до 90% экономии места)
  • Горизонтальное масштабирование
  • SQL-совместимость
  • Поддержка различных движков таблиц

Сравнение с другими решениями

Характеристика ClickHouse PostgreSQL MySQL MongoDB
Тип хранения Колоночная Строчная Строчная Документная
Аналитические запросы Отлично Хорошо Удовлетворительно Хорошо
OLTP нагрузка Плохо Отлично Отлично Хорошо
Компрессия Отлично Хорошо Удовлетворительно Хорошо
Масштабирование Отлично Хорошо Удовлетворительно Отлично

Подготовка сервера Ubuntu 24

Для комфортной работы с ClickHouse рекомендую минимум 2 ГБ RAM и 20 ГБ свободного места на диске. Если планируешь серьезные нагрузки, лучше взять сервер помощнее. Можешь заказать подходящий VPS или выделенный сервер под свои задачи.

Сначала обновим систему:

sudo apt update && sudo apt upgrade -y
sudo apt install -y apt-transport-https ca-certificates dirmngr

Установка ClickHouse

Есть несколько способов установки ClickHouse. Разберем самый надежный — через официальный репозиторий:

# Добавляем ключ репозитория
curl -fsSL 'https://packages.clickhouse.com/rpm/lts/repodata/repomd.xml.key' | sudo gpg --dearmor -o /usr/share/keyrings/clickhouse-keyring.gpg

# Добавляем репозиторий
echo "deb [signed-by=/usr/share/keyrings/clickhouse-keyring.gpg] https://packages.clickhouse.com/deb stable main" | sudo tee /etc/apt/sources.list.d/clickhouse.list

# Обновляем список пакетов
sudo apt update

# Устанавливаем ClickHouse
sudo apt install -y clickhouse-server clickhouse-client

Альтернативный способ — через готовый скрипт (быстрее, но менее гибкий):

curl https://clickhouse.com/ | sh
sudo ./clickhouse install

Первичная настройка

После установки нужно запустить сервис и добавить его в автозагрузку:

sudo systemctl start clickhouse-server
sudo systemctl enable clickhouse-server
sudo systemctl status clickhouse-server

Проверим, что все работает:

clickhouse-client --query "SELECT version()"

Настройка конфигурации

Основные конфигурационные файлы находятся в /etc/clickhouse-server/:

  • config.xml — основная конфигурация сервера
  • users.xml — настройки пользователей

Создадим пользователя для работы с базой:

sudo clickhouse-client --query "CREATE USER analyst IDENTIFIED BY 'strong_password'"
sudo clickhouse-client --query "GRANT ALL PRIVILEGES ON *.* TO analyst"

Для удаленного доступа отредактируем конфигурацию:

sudo nano /etc/clickhouse-server/config.xml

Найдем секцию <listen_host> и раскомментируем строку для прослушивания всех интерфейсов:

<listen_host>0.0.0.0</listen_host>

Перезапустим сервис:

sudo systemctl restart clickhouse-server

Практические примеры использования

Создание первой таблицы

clickhouse-client --query "
CREATE TABLE web_analytics (
    date Date,
    timestamp DateTime,
    user_id UInt32,
    page_url String,
    session_id String,
    ip_address IPv4,
    user_agent String
) ENGINE = MergeTree()
ORDER BY (date, timestamp)
PARTITION BY toYYYYMM(date)
"

Загрузка тестовых данных

clickhouse-client --query "
INSERT INTO web_analytics VALUES
('2024-01-15', '2024-01-15 10:30:00', 1001, '/home', 'sess_123', '192.168.1.100', 'Mozilla/5.0...'),
('2024-01-15', '2024-01-15 10:31:00', 1002, '/products', 'sess_124', '192.168.1.101', 'Mozilla/5.0...'),
('2024-01-15', '2024-01-15 10:32:00', 1001, '/cart', 'sess_123', '192.168.1.100', 'Mozilla/5.0...')
"

Аналитические запросы

# Топ страниц по посещаемости
clickhouse-client --query "
SELECT page_url, count() as visits
FROM web_analytics
GROUP BY page_url
ORDER BY visits DESC
LIMIT 10
"

# Уникальные пользователи по дням
clickhouse-client --query "
SELECT date, uniq(user_id) as unique_users
FROM web_analytics
GROUP BY date
ORDER BY date
"

Оптимизация производительности

Настройка памяти

В /etc/clickhouse-server/config.xml можно настроить лимиты памяти:

<max_memory_usage>10000000000</max_memory_usage>
<max_memory_usage_for_user>20000000000</max_memory_usage_for_user>

Настройка кэширования

<mark_cache_size>5368709120</mark_cache_size>
<uncompressed_cache_size>8589934592</uncompressed_cache_size>

Мониторинг и логирование

ClickHouse предоставляет множество системных таблиц для мониторинга:

# Активные запросы
SELECT query, user, elapsed FROM system.processes;

# Статистика по таблицам
SELECT 
    table,
    formatReadableSize(sum(bytes_on_disk)) as size,
    sum(rows) as rows
FROM system.parts
WHERE active = 1
GROUP BY table;

# Медленные запросы
SELECT 
    query,
    query_duration_ms,
    user,
    initial_query_start_time
FROM system.query_log
WHERE query_duration_ms > 1000
ORDER BY query_duration_ms DESC
LIMIT 10;

Интеграция с другими инструментами

Подключение к Grafana

ClickHouse отлично интегрируется с Grafana через специальный плагин. Установим его:

sudo grafana-cli plugins install grafana-clickhouse-datasource
sudo systemctl restart grafana-server

Работа с Python

pip install clickhouse-driver

# Пример подключения
from clickhouse_driver import Client

client = Client(host='localhost', user='analyst', password='strong_password')
result = client.execute('SELECT count() FROM web_analytics')
print(result)

Резервное копирование и восстановление

Для бэкапов можно использовать встроенные возможности:

# Создание бэкапа
clickhouse-client --query "BACKUP TABLE web_analytics TO Disk('backups', 'web_analytics_backup')"

# Восстановление
clickhouse-client --query "RESTORE TABLE web_analytics FROM Disk('backups', 'web_analytics_backup')"

Альтернативно можно использовать утилиту clickhouse-backup:

wget https://github.com/Altinity/clickhouse-backup/releases/download/v2.4.23/clickhouse-backup-linux-amd64.tar.gz
tar -xzf clickhouse-backup-linux-amd64.tar.gz
sudo mv clickhouse-backup /usr/local/bin/

Типичные проблемы и их решения

Проблема: Сервер не запускается

Решение: Проверьте логи и права доступа

sudo journalctl -u clickhouse-server -f
sudo chown -R clickhouse:clickhouse /var/lib/clickhouse/

Проблема: Медленные запросы

Решение: Проверьте индексы и секционирование

# Анализ плана выполнения
EXPLAIN SELECT * FROM web_analytics WHERE date = '2024-01-15';

# Проверка использования индексов
SELECT * FROM system.query_log WHERE query LIKE '%web_analytics%' ORDER BY event_time DESC LIMIT 1;

Интересные факты и нестандартные применения

  • ClickHouse может работать как time-series база данных для IoT-данных
  • Поддерживает географические данные и может работать с координатами
  • Можно использовать для анализа логов веб-серверов в реальном времени
  • Отлично подходит для построения data lakes
  • Может работать с внешними данными через table functions

Автоматизация и скрипты

Создадим простой скрипт для автоматической очистки старых данных:

#!/bin/bash
# cleanup_old_data.sh

CLICKHOUSE_CLIENT="clickhouse-client"
RETENTION_DAYS=90

$CLICKHOUSE_CLIENT --query "
ALTER TABLE web_analytics 
DROP PARTITION tuple(toYYYYMM(today() - INTERVAL $RETENTION_DAYS DAY))
"

echo "Cleanup completed for data older than $RETENTION_DAYS days"

Добавим в cron для ежедневного выполнения:

sudo crontab -e
# Добавляем строку:
0 2 * * * /path/to/cleanup_old_data.sh

Масштабирование и кластеризация

Для создания кластера добавим конфигурацию в config.xml:

<remote_servers>
    <my_cluster>
        <shard>
            <replica>
                <host>node1.example.com</host>
                <port>9000</port>
            </replica>
        </shard>
        <shard>
            <replica>
                <host>node2.example.com</host>
                <port>9000</port>
            </replica>
        </shard>
    </my_cluster>
</remote_servers>

Полезные ссылки

Заключение и рекомендации

ClickHouse — мощный инструмент для работы с большими данными, который может значительно ускорить ваши аналитические запросы. Основные рекомендации по использованию:

  • Где использовать: Аналитика, логирование, IoT-данные, веб-аналитика, финансовая отчетность
  • Где НЕ использовать: Транзакционные системы, частые обновления записей, небольшие объемы данных
  • Оптимальные условия: Большие объемы данных, преимущественно чтение, аналитические запросы

Правильно настроенный ClickHouse может обрабатывать миллиарды записей за секунды, что делает его незаменимым для современных data-driven приложений. Главное — помнить о правильном секционировании, индексировании и не забывать про регулярную очистку старых данных.

Успехов в работе с данными!


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked