Инженер на минималках: установка и настройка ClickHouse
Базы данных — один из важнейших инструментов в арсенале аналитика. А ClickHouse — это высокопроизводительная аналитическая СУБД, которая заточена на то, чтобы переваривать огромные массивы данных. Поэтому полезно будет разобраться, как самостоятельно установить ClickHouse в Yandex Cloud или на VDS-сервере, как создать пользователей и активировать веб-интерфейс и доступ по сети. Этим и займемся в статье.
Дисклеймер: Я Женя Кузнецов, увлеченный диджитал-стратег, который любит копаться в данных и визуализировать их. Но я не инженер данных, поэтому могу вольно интерпретировать некоторые понятия — хотя факты стараюсь проверять.
Зачем мне впервые понадобилась база данных?
Дело в том, как устроена Яндекс Метрика и коннекторы к ней из Yandex DataLens.
В Logs API Яндекс Метрики данные о достижении целей собраны в несколько массивов:
ym: s: goalsID — номера целей, достигнутых за данный визит;
ym: s: goalsSerialNumber — порядковые номера достижений цели с конкретным идентификатором;
ym: s: goalsDateTime — время достижения каждой цели (в часовом поясе UTC+3).
А в коннекторе DataLens к Яндекс Метрике доступны только:
общее количество достижений любой цели,
конверсия в достижение любой цели,
текстовое поле с названием достигнутой цели.
И если при построении чарта сделать фильтрацию по этому тексту (т. е. попытаться вывести количество достижений цели и отфильтровать их по названию достигнутой цели) — то данные с метрикой разойдутся, причем значительно.
Также не получится посчитать и производные метрики вроде конверсии. Данные по отдельным целям доступны только в Logs Api Яндекс Метрики.
Есть лайфхак, как обойти это, не выгружая данные, но он работает, только если нужно отслеживать какую-то одну макроконверсию. Об этом я расскажу в отдельном материале.
Почему ClickHouse?
ClickHouse — это высокопроизводительная аналитическая система управления базами данных (СУБД) с открытым исходным кодом. Яндекс разработал ее для решения задач веб-аналитики в Яндекс Метрике.
Что важно, на мой взгляд:
система быстрая и заточена под работу с большими массивами данных,
используется в крупных продуктовых командах, поэтому уметь в ней работать — плюс к резюме,
она опенсорсная.
К тому же ClickHouse использует собственный диалект SQL, близкий к стандартному, но содержащий различные расширения: массивы и вложенные структуры данных, функции высшего порядка, вероятностные структуры, функции для работы с URI.
Подробнее про особенности ClickHouse можно почитать в официальной документации.
Итак, есть проблема, мы выбрали инструмент. Осталось только разобраться, как им пользоваться. И тут нам доступны варианты:
Простой: развернуть ClickHouse в Yandex Cloud. За простоту придется платить, причем около 5 тысяч рублей в месяц в минимальной конфигурации. Но зато все можно сделать в простом и наглядном веб-интерфейсе.
Продвинутый: развернуть ClickHouse на собственной виртуальной машине (VDS).
Мне в работе нужно обращаться к базе извне, поэтому вариант, как развернуть ClickHouse локально, я не рассматриваю.
ClickHouse в облаке
Кратко процедура создания ClickHouse в облаке описана в кейсе «Веб-аналитика с расчетом воронок и когорт на данных Яндекс Метрики», но там не хватает скриншотов — поэтому кратко пробегусь по процессу настройки.
1. Переходим в Managed Service for ClickHouse и выбираем «Создать кластер ClickHouse».
2. Выбираем конфигурацию сервера. Под простенькие задачи хватит и минимальной.
3. Важно сделать кластер публичным — в блоке «Хосты» нажимаем на карандаш и включаем опцию «Публичный доступ».
4. В блоке «Настройки СУБД» можно выключить управление пользователями через SQL, указать имя пользователя, пароль и имя базы данных.
5. В блоке «Сервисные настройки» нужно включить опции: «Доступ из DataLens», «Доступ из консоли управления», «Доступ из Метрики и AppMetrica», «Доступ из Serverless».
В течение нескольких минут кластер ClickHouse будет создан.
ClickHouse на своем сервере
Этот путь делится на два шага: покупку VDS и собственно установку ClickHouse.
Покупка VDS
1. Для покупки виртуальной машины нужно определиться с хостингом — я выбрал NetAngels.
Обратите внимание на минимальные требования из документации — не менее 4 ГБ оперативной памяти. Я пробовал запускать на 2 ГБ — машина зависала во время выполнения даже несложных SQL-запросов.
2. После выбора через нескольких минут создастся виртуальная машина, а на почту придут реквизиты для доступа по SSH. Я выбрал сборку от NetAngels на базе Debian 11.
3. Переходим в терминал и выполняем все шаги установки.
Я не заморачивался и сделал всё в веб-версии.
Установка ClickHouse
1. Устанавливаем или проверяем, установлены ли следующие пакеты:
apt-transport-https — для возможности взаимодействовать с репозиториями по https;
ca-certificates — набор корневых сертификатов;
dirmngr — для управления сетевыми сертификатами.
sudo apt-get install -y apt-transport-https ca-certificates dirmngr |
В моем случае пакеты уже установлены.
2. Настраиваем ключи.
GNUPGHOME=$(mktemp -d) sudo GNUPGHOME=»$GNUPGHOME» gpg --no-default-keyring --keyring /usr/share/keyrings/clickhouse-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 8919F6BD2B48D754 sudo rm -rf »$GNUPGHOME» sudo chmod +r /usr/share/keyrings/clickhouse-keyring.gpg |
3. Указываем репозиторий.
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 |
4. Обновляем кэш.
sudo apt-get update |
5. Запускаем установку сервера и клиента. Тут возможны разные варианты.
Быстрая установка без лишних вопросов (команда -y говорит отвечать YES во всех вопросах). Для пользователя default не будет установлен пароль, но, с другой стороны, мы скоро его деактивируем.
sudo apt-get install -y clickhouse-server clickhouse-client |
sudo apt-get install clickhouse-server clickhouse-client |
Также мы можем задать специфическую версию при установке. Первый раз я ставил именно так, поскольку без принудительного указания ставились достаточно старые версии (что-то из серии 19.1.*)
sudo apt-get install clickhouse-server=24.1.5.6 clickhouse-client=24.1.5.6 clickhouse-common-static=24.1.5.6 |
Список всех версий можно найти на GitHub.
Все, ClickHouse установлен!
Подробная справка по установке — в официальной документации ClickHouse.
Запуск сервера и авторизация
Тут же нам подсказывают две основные команды — для запуска сервера и для подключения как пользователь default.
1. Запускаем сервер.
sudo clickhouse start |
2. Авторизуемся как пользователь default (понадобится заданный ранее пароль).
clickhouse-client |
3. Выполняем SQL-запрос, чтобы убедиться, что все работает.
Конфигурация сервера
Файлы конфигурации в формате .xml лежат в папке /etc/clickhouse-server/. Причем можно либо напрямую править основной файл конфигурации, либо создать подпапку config.d по адресу etc/clickhouse-server/config.d/ и в нее положить свой файл конфигурации. Эти файлы будут объединены до того, как конфигурация вступит в силу.
Важно не забывать, что после изменения настроек нужно перезапускать сервер. Для этого могут быть использованы команды:
# Перезагрузка конфигурации сервера sudo service clickhouse-server reload |
# Полная перезагрузка сервера sudo service clickhouse-server restart |
Подробнее о конфигурации — в официальной справке.
Создание пользователей
Теперь наша задача создать пользователей, из-под которых мы будем выполнять все SQL-запросы. Для этого нужно пройти несколько шагов.
1. Включаем SQL User Mode для пользователя Default. Когда мы задали пароль при установке — в папке users.d создался файл default-password.xml с паролем пользователя. Необходимо добавить в него команды:
|
2. Перезапускаем сервер, чтобы настройки применились.
sudo service clickhouse-server restart |
Создание администратора для базы данных
1. Входим как пользователь default, чтобы создать администратора для базы данных, который сможет создавать базы, таблицы и пользователей, а также выдавать доступы.
CREATE USER clickhouse_admin IDENTIFIED BY 'qwerty'; |
2. Выдаем этому пользователю права на все базы и таблицы.
GRANT ALL ON *.* TO clickhouse_admin WITH GRANT OPTION; |
Подробнее про SQL-пользователей и роли — в справке ClickHouse.
Проверка администратора и создание базы данных
1. Перезайдем под новым пользователем и проверим, что все работает.
clickhouse-client --user clickhouse_admin --password qwerty |
2. Создадим базу данных и пользователя для нее.
CREATE DATABASE test_database; Создадим таблицу. CREATE TABLE test_database.test_table ( id UInt64, column1 String, column2 String ) ENGINE MergeTree ORDER BY id; |
3. Заполним таблицу данными.
INSERT INTO test_database.test_table (id, column1, column2) VALUES (1, 'A', 'abc'), (2, 'A', 'def'), (3, 'B', 'abc'), (4, 'B', 'def'); |
4. Посмотрим содержимое таблицы.
SELECT * FROM test_database.test_table |
Создание и проверка пользователя
1. Создадим отдельного пользователя с правами только к созданной базе.
CREATE USER clickhouse_user IDENTIFIED BY 'password'; GRANT ALL ON test_database.* TO clickhouse_user WITH GRANT OPTION; |
Подробнее про выдачу прав пользователям — в справке ClickHouse.
2. Проверим пользователя. Для этого сначала авторизуемся.
clickhouse-client --user clickhouse_user --password password |
А затем выполним запрос к нашей базе.
SELECT * FROM test_database.test_table |
На этом мы закончили с созданием пользователей:
создали админа, из-под которого мы можем создавать пользователей и базы данных,
создали пользователя с доступом только к созданной базе test_database.
Отключение SQL User Mode и ограничение прав пользователя default
Чтобы отозвать права на управление у пользователя default, изменим настройки в файле default-password.xml.
|
Справка по управлению доступом в ClickHouse.
Также мы можем полностью отключить пользователя default. Для этого достаточно скорректировать открывающий тег.
Активация возможности подключаться по сети
По умолчанию ClickHouse слушает запросы на локальной петле и не принимает запросов по сети. Для решения задачи нам нужно разрешить обработку сетевых запросов.
1. В папке etc/clickhouse-server/config.d/ создадим файл default-config.xml и добавим в него следующие строки.
|
2. Перезагрузим сервер.
sudo service clickhouse-server restart |
Теперь ClickHouse доступен по IP-адресу сервера через порт 8123. Безопасное соединение через https я не настраивал.
В моем случае это:
http://213.189.220.34:8123/ |
Активация веб-интерфейса Tabix
Если мы хотим иметь веб-интерфейс по адресу нашего сервера, необходимо активировать Tabix (опенсорсный визуальный интерфейс для ClickHouse).
1. Скорректируем наш файл конфигурации default-config.xml.
|