- Home »

Как установить и использовать 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 приложений. Главное — помнить о правильном секционировании, индексировании и не забывать про регулярную очистку старых данных.
Успехов в работе с данными!
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.