Больше не нужно искать работу мечты — присоединяйтесь к команде Клауда

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

Александр Бархатов
Александр Бархатов
Технический писатель
14 июня 2024 г.
52
11 минут чтения
Средний рейтинг статьи: 5

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

Одной из самых известных и популярных колоночных баз данных является ClickHouse — бесплатная СУБД с открытым исходным кодом, первоначально разработанная компанией Яндекс. Впоследствии разработка перешла под контроль другой компании — ClickHouse, Inc. Благодаря высокой скорости обработки данных, ClickHouse хорошо зарекомендовала себя при работе с большими и аналитическими данными. Ознакомиться с архитектурой ClickHouse более подробно можно в документации.

В данной статье мы произведем установку СУБД ClickHouse на операционную систему Ubuntu 22.04, а также рассмотрим несколько практических примеров использования.

Предварительные требования

Для установки ClickHouse на операционную систему Ubuntu 22.04 нам понадобится:

  • Сервер или виртуальная машина с предустановленной ОС Ubuntu 22.04.

Регистрация в Timeweb Cloud

Чтобы арендовать облачный или выделенный сервер в Timeweb Cloud, необходимо пройти регистрацию. 

Переходим по ссылке для регистрации нового пользователя. Мы выберем регистрацию на физическое лицо и заполним следующие данные:

  • ФИО,

  • адрес электронной почты,

  • номер телефона.

После регистрации на указанный адрес почты придет сообщение с ссылкой для активации аккаунта и входа в панель — перейдите по ней.

Создание облачного сервера

После того, как учетная запись была создана и активирована, можно арендовать облачный сервер. 

1) Переходим на страницу авторизации и входим в аккаунт при помощи логина или адреса электронной почты и пароля или при помощи ВКонтакте, GitHub, Google.

2) После успешной авторизации отобразится панель управления текущего проекта. Переходим в раздел «Облачные серверы» и нажимаем «Создать» или «Добавить».

3) Выбираем операционную систему, которая будет установлена на сервер. В нашем случае нам необходима Ubuntu версии 22.04.

4) Выбираем регион, в котором будет находиться наш сервер. Выбирать рекомендуется тот регион, который ближе всего находится к вам физически. У каждого доступного региона справа вверху отображается ping, т.е. время, необходимое для передачи данных с вашего компьютера на сервер. Чем меньше указанное время, тем быстрее будет осуществляться передача данных.

Image14

5) Далее выбираем необходимую конфигурацию для сервера. 

Так как в данной статье упор делается только на установке и на демонстрации возможностей СУБД, то выберем минимально поддерживаемую конфигурацию ClickHouse — 2 ГБ оперативной памяти, двухъядерный процессор и 40 ГБ места на жестком диске. В реальности вам необходимо выбирать именно ту конфигурацию, которая будет удовлетворять вашим потребностям при работе с ClickHouse.

Стоит отметить что для оптимальной работы с ClickHouse желательно выбирать минимум 4 ГБ оперативной памяти для выполнения нетривиальных запросов, а также выбирать оптимальное количество ядер процессора (чем больше ядер, тем лучше, но необходим минимум двухядерный процессор) и минимум 2 ГБ свободного места на жестком диске. Если не соблюдать системные требования, то запустить ClickHouse не получится, и в лог-файлах будут отображаться ошибки типа Linux threads max count is too low, Available memory at server startup is too low, Maximum number of threads is lower than 30000. Выбираем соответствующий тариф.

6) Далее необходимо решить, будет ли сервер доступен из внешний сети или же только из приватной (частной) сети. 

7) По желанию можно оформить дополнительные услуги, включая резервные копии и защиту от DDoS–атак (последняя доступна в Санкт–Петербурге и Москве).

8) Также заранее можно загрузить SSH–ключ, чтобы не входить на север при помощи пароля.

9) Можно задать необходимое имя для сервера которое будет отображаться в панели управления, а также выбрать проект.

10) Для создания сервера необходимо нажать на кнопку «Заказать».

Если на вашем аккаунте недостаточно средств, то будет выведено предупреждение о необходимости пополнить баланс. После оплаты и создания сервера откроется Дашборд сервера, где можно будет найти IP–адрес, логин и пароль для подключения.

Предварительная настройка сервера

Все команды, которые будут перечислены далее в статье, необходимо выполнять от имени root-пользователя или от имени обычного пользователя с правами sudo

Перед тем как приступать к установке ClickHouse, необходимо выполнить следующие требования:

1) При работе с ClickHouse в Production-окружениях необходимо выключить swap, если он используется. Сделать это можно двумя способами:

1.1) Отключить SWAP до последующей перезагрузки сервера при помощи команды:

swapoff -a

1.2) Отключить SWAP перманентно (на постоянной основе). Для этого необходимо открыть на редактирование файл /etc/fstab при помощи любого текстового редактора и добавить перед строкой, содержащей слово swap, символ решетки #, чтобы получилось как на скриншоте ниже:

Image3

Сохраните изменения и выйдите из файла. 

2) Заранее установить пакет tzdata, если он отсутствует в системе. Для его установки необходимо выполнить команду:

apt update && apt -y install tzdata
cloud

Установка ClickHouse на Ubuntu 22.04

Для установки ClickHouse на Ubuntu 22.04 необходимо выполнить следующие шаги.

1) Устанавливаем необходимые пакеты:

apt -y install apt-transport-https ca-certificates dirmngr

2) Импортируем GPG-ключ от официального репозитория Ubuntu с целью возможности безопасной загрузки проверенных пакетов ClickHouse:

apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 8919F6BD2B48D754

3) Создаем файл с официальным репозиторием ClickHouse:

echo "deb https://packages.clickhouse.com/deb stable main" | tee /etc/apt/sources.list.d/clickhouse.list

4) Обновляем списки пакетов и устанавливаем серверный и клиентский пакеты clickhouse:

apt update && apt -y install clickhouse-server clickhouse-client

5) В процессе установки система предложит задать пароль для стандартного (дефолтного) пользователя:

Image5

После ввода пароля установщик сообщит, что пароль будет сохранен в  файле /etc/clickhouse-server/users.d/default-password.xml:

Image13

6) После того как установка будет завершена, необходимо запустить ClickHouse при помощи команды:

service clickhouse-server start

7) Для проверки статуса ClickHouse необходимо использовать команду:

service clickhouse-server status

Image2

Если в выводе команды отображается active (running), то Clickhouse успешно запущен и работает. 

На этом установка ClickHouse завершена.

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

Рассмотрим использование ClickHouse на практике. Для начала необходимо подключиться к СУБД при помощи официальной клиентской программы, которая была установлена вместе с сервером:

clickhouse-client --password

Image15

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

Image12

Создание базы данных

Стоит отметить, что в качестве языка запросов в ClickHouse используется язык SQL, который применяется в других СУБД, таких как MySQL и PostgreSQL. Для начала создадим новую базу данных с именем info. Для создания базы данных используется оператор CREATE DATABASE:

CREATE DATABASE info;

Image24

Точку с запятой в конце команды можно не указывать. После каждого успешного выполненного запроса, в консоли будет выводится уникальный номер выполненного запроса (Query id) а также сообщение Ok.

Убедимся, что ранее созданная база данных info присутствует в списке доступных баз данных. Для этого выведем список всех доступных баз данных при помощи команды SHOW DATABASES:

SHOW DATABASES;

Image7

По умолчанию в ClickHouse присутствуют 4 системные базы данных: INFORMATION_SCHEMA, default, information_schema, system. Также на скриншоте выше мы можем обнаружить нашу созданную базу данных с именем info.

Создание таблицы

Создадим таблицу в базе данных info. Для этого сначала выберем данную базу данных в качестве последующих запросов по умолчанию, используя оператор USE (так система поймет, что все последующие операции будут применятся только к выбранной базе данных):

USE info;

Image8

Создадим таблицу с именем orders, которая будет состоять из 4 столбцов: order_id, customer_name, customer_phone_number, customer_email:

CREATE TABLE orders (

 order_id UInt64 NOT NULL,
 customer_name String NOT NULL,
 customer_phone_number UInt32,
 customer_email String
 
) ENGINE = MergeTree() 
PRIMARY KEY order_id 
ORDER BY order_id;

Image11

Разберем пример по созданию таблицы более подробно.

  • CREATE TABLE — оператор для создания таблиц;
  • order_id UInt64 NOT NULL — столбец с именем order_id. Тип данных столбца — UInt64, который означает что для хранения данных используются 64–битные целые числа. NOT NULL означает, что столбец не поддерживает пустые значения;
  • customer_name String NOT NULL — столбец с именем customer_name. Тип данных столбца — String, который означает, что для хранения данных используется строка произвольной длины. При этом длина строки не ограничена. NOT NULL означает что столбец не поддерживает пустые значения;
  • customer_phone_number UInt32 — столбец с именем customer_phone_number. Тип данных столбца — UInt32, который означает, что для хранения данных используются 32–битные целые числа;
  • customer_email String — столбец с именем customer_email. Тип данных столбца — String. Длина строки не ограничена;
  • ENGINE = MergeTree() — указывается движок для хранения данных. В данном случае в качестве движка используется MergeTree. Он используется при работе с большим количеством данных, которые должны быть добавлены в таблицу, при этом их необходимо быстро записать. 
  • PRIMARY KEY order_id — столбец с именем order_id выступает в роли первичного ключа, при помощи которого можно однозначно идентифицировать каждую запись.
  • ORDER BY order_id — означает, что данные будут упорядочены по столбцу order_id

Добавление данных в таблицу

Теперь добавим в ранее созданную таблицу orders данные о покупателе. Для добавления данных используется оператор INSERT INTO:

INSERT INTO orders VALUES (10001, 'Alex', 79670140511, 'user_mail@gmail.com');

Image19

Добавление нового столбца в таблицу

Таблицы можно модифицировать, например, чтобы добавить новый столбец. Добавим в ранее созданную таблицу orders новый столбец с именем customer_address и зададим ему тип данных String (строковый формат данных), используя оператор ALTER TABLE:

ALTER TABLE orders ADD COLUMN customer_address String;

Выполнение запросов на выборку

Так же, как и в языке SQL, чтобы выбрать необходимые данные, используется оператор SELECT. Выполним несколько запросов на выборку данных. Для начала выполним обычный запрос на выборку, в котором выберем все данные из столбцов order_id и customer_name:

SELECT order_id, customer_name FROM orders;

Image1

Теперь выполним запрос на выборку с использованием условий. Для этого используется оператор WHERE. Выберем все данные из столбцов order_id и customer_name, у которых в столбце customer_name используется значение Alex:

SELECT order_id, customer_name FROM orders WHERE customer_name = 'Alex';

Image26

Обновление данных в таблице

Для того чтобы обновить данные в таблице, необходимо использовать операторы ALTER TABLE и UPDATE. Изменим имя покупателя с Alex на John в столбце customer_name таблицы orders при помощи следующего запроса: 

ALTER TABLE orders UPDATE customer_name='alex' where customer_name='John';

Image10

Удаление данных из таблицы

Для удаления данных из таблицы используются операторы ALTER TABLE и DELETE. Удалим имя покупателя из столбца customer_name таблицы orders:

ALTER TABLE orders DELETE WHERE customer_name='John';

Image16

Работа с несколькими таблицами. Оператор JOIN

Как и в языке SQL, ClickHouse поддерживает оператор JOIN для выборки данных из двух и более таблиц. Рассмотрим использование JOIN на конкретном примере. Создадим новую базу данных с именем users:

CREATE DATABASE users;

Image21

Выберем данную базу данных для дальнейшего использования:

USE users;

Image18

Создадим две новые таблицы:

CREATE TABLE users_parted1 (
id Int32,
name String,
age Int32
) ENGINE = MergeTree ORDER BY id;

Image25

CREATE TABLE users_parted2 (
id Int32,
address String,
phone String
) ENGINE = MergeTree ORDER BY id;

Image23

Добавим данные в каждую таблицу:

INSERT INTO users_parted1 (id, name, age) VALUES (1, 'Tom', 47), (2, 'Kate', 28), (3, 'Bob', 44);

Image22

INSERT INTO users_parted2 (id, address, phone) VALUES (1, '123 Main St', '76765945543'), (3, '456 Elm St', '76764790143'), (4, '789 Oak St', '70067425543');

Image20

Выполним INNER JOIN (внешнее соединение)? т.е. запрос на объединение двух таблиц, используя столбец.

SELECT *
FROM users_parted1
INNER JOIN users_parted2
ON users_parted1.id = users_parted2.id;

Image17

Удаление объектов базы данных

Для удаления объектов используется оператор DROP, после которого указывается тип удаляемого объекта. Например, для удаления таблицы используется оператор DROP TABLE. Удалим ранее созданную таблицу orders:

DROP TABLE orders;

Image4

Для того чтобы удалить базу данных, необходимо воспользоваться оператором DROP DATABASE:

DROP DATABASE info;

Image6

Разверните ClickHouse на облачном сервере

Заключение

ClickHouse представляет собой колоночную аналитическую СУБД, в которой данные хранятся в виде столбцов, в то время как в традиционных реляционных СУБД данные хранятся в виде строк. Благодаря данному преимуществу ClickHouse быстро обрабатывает большой массив данных.

14 июня 2024 г.
52
11 минут чтения
Средний рейтинг статьи: 5
Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
Комментарии 0