Статья 1 | Быстрый старт ClickHouse

Большие данные

Введение в ClickHouse

ClickHouse — это колоночная система управления базами данных (СУБД) для онлайн-аналитики (OLAP). ClickHouse изначально был продуктом под названием Яндекс.Метрика, который в основном использовался для анализа веб-трафика. Полное название ClickHouse:Click Stream,Data WareHouse, именуемый ClickHouse.

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

  • Поддерживает полные операции SQL

  • Столбчатое хранилище и сжатие данных

  • Векторизованный исполнительный движок

  • Реляционная модель (аналогична традиционным базам данных)

  • Богатый табличный движок

  • параллельная обработка

  • онлайн-поиск

  • разделение данных

    ClickHouse как высокопроизводительная база данных OLAP имеет следующие недостатки.

  • Транзакции не поддерживаются.

  • Он не годится для запросов по детализации строк по первичному ключу (хотя и поддерживается), поэтому ClickHouse не следует использовать в качестве базы данных Key-Value.

  • Плохо удаляет данные по строке (хотя и поддерживается)

Автономная установка

Скачать RPM-пакет

Метод установки, описанный в этой статье, — автономная установка.Вы можете скачать соответствующий rpm-пакет по ссылке ниже или загрузить его непосредственно из Baidu Cloud.

-- rpm包地址
https://packagecloud.io/Altinity/clickhouse
-- 百度云地址
链接:https://pan.baidu.com/s/1pFR66SzLvPYMfcpuPJww5A 
提取码:gh5a

Включите эти пакеты в наше установленное программное обеспечение:

  • clickhouse-clientПакет, содержащий приложение clickhouse-client, которое является интерактивным консольным клиентом ClickHouse.
  • clickhouse-commonПакет, содержащий исполняемый файл ClickHouse.
  • clickhouse-serverПакет, содержащий файлы конфигурации ClickHouse для запуска в качестве сервера.

Всего включено четыре пакета RPM,

clickhouse-client-19.17.4.11-1.el7.x86_64.rpm
clickhouse-common-static-19.17.4.11-1.el7.x86_64.rpm
clickhouse-server-19.17.4.11-1.el7.x86_64.rpm
clickhouse-server-common-19.17.4.11-1.el7.x86_64.rpm

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

Сначала можно установить вручнуюlibicu-50.2-4.el7_7.x86_64.rpmпакет зависимостей

отключить брандмауэр

## 查看防火墙状态。
systemctl status firewalld
## 临时关闭防火墙命令。重启电脑后,防火墙自动起来。
systemctl stop firewalld
## 永久关闭防火墙命令。重启后,防火墙不会自动启动。
systemctl disable firewalld

Системные Требования

ClickHouse может работать на любой Linux, FreeBSD или Mac OS X с архитектурой процессора x86_64, AArch64 или PowerPC64LE. В то время как готовые двоичные файлы обычно компилируются для x86_64 и используют набор инструкций SSE 4.2, использование ЦП, поддерживающего его, становится дополнительным системным требованием, если не указано иное. Вот команда, чтобы проверить, поддерживает ли текущий процессор SSE 4.2:

grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"
SSE 4.2 supported

Чтобы запустить ClickHouse на процессорах, не поддерживающих SSE 4.2 или имеющих архитектуру AArch64 или PowerPC64LE, необходимоСобрать ClickHouse из исходниковВнесите соответствующие изменения в конфигурацию.

Установить RPM-пакет

## 将rpm包上传至/opt/software目录下
## 执行如下命令进行安装
[root@cdh06 software]# rpm -ivh *.rpm
错误:依赖检测失败:
        libicudata.so.50()(64bit) 被 clickhouse-common-static-19.17.4.11-1.el7.x86_64 需要
        libicui18n.so.50()(64bit) 被 clickhouse-common-static-19.17.4.11-1.el7.x86_64 需要
        libicuuc.so.50()(64bit) 被 clickhouse-common-static-19.17.4.11-1.el7.x86_64 需要
        libicudata.so.50()(64bit) 被 clickhouse-server-19.17.4.11-1.el7.x86_64 需要
        libicui18n.so.50()(64bit) 被 clickhouse-server-19.17.4.11-1.el7.x86_64 需要
        libicuuc.so.50()(64bit) 被 clickhouse-server-19.17.4.11-1.el7.x86_64 需要
## 上面安装报错,缺少相应的依赖包,
## 需要下载相对应的依赖包
## 下载libicu-50.2-4.el7_7.x86_64.rpm进行安装即可

Просмотр информации об установке

Структура каталогов

  • /etc/clickhouse-server: Каталог файлов конфигурации сервера, включая глобальную конфигурацию config.xml и пользовательскую конфигурацию users.xml и т. д.

  • /etc/clickhouse-client: конфигурация клиента, включая папку conf.d и файл config.xml.

  • /var/lib/clickhouse: Каталог хранения данных по умолчанию (обычно изменяют конфигурацию пути по умолчанию, чтобы сохранить данные по пути, смонтированному на массовом диске).

  • /var/log/clickhouse-server: каталог, в котором журналы сохраняются по умолчанию (обычно конфигурация пути изменяется для сохранения журналов по пути, смонтированному на массовом диске).

конфигурационный файл

  • /etc/security/limits.d/clickhouse.conf: Конфигурация количества файловых дескрипторов
[root@cdh06 clickhouse-server]# cat /etc/security/limits.d/clickhouse.conf 
clickhouse      soft    nofile  262144
clickhouse      hard    nofile  262144

Конфигурация также может быть изменена с помощью max_open_files в config.xml.

 <!-- Set limit on number of open files (default: maximum). This setting makes sense on Mac OS X because getrlimit() fails to retrieve correct maximum value. -->
    <!-- <max_open_files>262144</max_open_files> -->
  • /etc/cron.d/clickhouse-server:cron: Конфигурация запланированной задачи, которая используется для восстановления прерванного по нештатным причинам сервисного процесса ClickHouse.Конфигурация по умолчанию следующая.
[root@cdh06 cron.d]# cat /etc/cron.d/clickhouse-server
#*/10 * * * * root (which service > /dev/null 2>&1 && (service clickhouse-server condstart ||:)) || /etc/init.d/clickhouse-server condstart > /dev/null 2>&1

запускаемый файл

Наконец, набор исполняемых файлов по пути /usr/bin:

  • clickhouse: исполняемый файл основной программы.

  • clickhouse-client: мягкая ссылка на исполняемый файл ClickHouse для использования клиентскими подключениями.

  • clickhouse-server: программная ссылка, указывающая на исполняемый файл ClickHouse для запуска сервера.

  • clickhouse-compressor: встроенный инструмент сжатия можно использовать для положительного давления и обратного решения данных.

запуск/остановка службы

## 启动服务
[root@cdh06 ~]# service clickhouse-server start
Start clickhouse-server service: Path to data directory in /etc/clickhouse-server/config.xml: /var/lib/clickhouse/
DONE
## 关闭服务
[root@cdh06 ~]# service clickhouse-server stop

Подключение клиента

[root@cdh06 ~]# clickhouse-client 
ClickHouse client version 19.17.4.11.
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 19.17.4 revision 54428.

cdh06 :) show databases;

SHOW DATABASES

┌─name────┐
│ default │
│ system  │
└─────────┘

2 rows in set. Elapsed: 0.004 sec. 

Основная операция

создать базу данных

  • грамматика
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] [ENGINE = engine(...)]
  • пример
CREATE DATABASE IF NOT EXISTS tutorial

По умолчанию ClickHouse использует собственный движок базы данных.Ordinary(Любой виднастольный двигатель,В большинстве случаев просто используйте механизм базы данных по умолчанию). Конечно, вы также можете использоватьLazyдвигатель иMySQLДвижок, например, использующий движок MySQL, может напрямую оперировать таблицами в базе данных, соответствующей MySQL в ClickHouse. Предполагая, что в MySQL есть база данных с именем clickhouse, вы можете использовать следующий метод для подключения к базе данных MySQL.

-- --------------------------语法-----------------------------------
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]
ENGINE = MySQL('host:port', ['database' | database], 'user', 'password')
-- --------------------------示例------------------------------------
CREATE DATABASE mysql_db ENGINE = MySQL('192.168.200.241:3306', 'clickhouse', 'root', '123qwe');
-- ---------------------------操作-----------------------------------
cdh06 :) use mysql_db;
cdh06 :) show tables;

SHOW TABLES

┌─name─┐
│ test │
└──────┘

1 rows in set. Elapsed: 0.005 sec. 

cdh06 :) select * from test;

SELECT *
FROM test

┌─id─┬─name──┐
│  1 │ tom   │
│  2 │ jack  │
│  3 │ lihua │
└────┴───────┘

3 rows in set. Elapsed: 0.047 sec. 

создать таблицу

  • грамматика
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [compression_codec] [TTL expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [compression_codec] [TTL expr2],
    ...
) ENGINE = engine
  • Пример
-- 注意首字母大写
-- 建表
create table test(
    id Int32,
    name String
) engine=Memory;

Приведенная выше команда создает таблицу памяти, то есть с использованием механизма памяти. Механизм таблицы определяет характеристики таблицы данных, а также определяет, как данные будут храниться и загружаться. Движок памяти — простейший движок таблиц ClickHouse, данные будут храниться только в памяти и будут потеряны при перезапуске сервиса.

Установка кластера

шаги установки

Основные этапы автономной установки и базовое использование клиента ClickHouse описаны выше. Далее мы расскажем, как установить кластер. Установка кластера ClickHouse очень проста, сначала повторите вышеописанные действия, установите ClickHouse на другие машины, а затем настройте **/etc/clickhouse-server/config.xmlа также/etc/metrika.xmlВсего два файла. Стоит отметить, что зависимость кластера ClickHouse отZookeeper**, поэтому обязательно сначала установите кластер Zookeeper.Этапы установки кластера zk очень просты и не будут рассматриваться в этой статье. В этой статье демонстрируется установка кластера ClickHouse из трех узлов. Конкретные шаги заключаются в следующем:

  • Сначала повторите шаги установки на одной машине и установите ClickHouse на две другие машины соответственно.

  • Затем измените файл **/etc/clickhouse-server/config.xml** на каждой машине.

    <!-- 如果禁用了ipv6,使用下面配置-->
    <listen_host>0.0.0.0</listen_host>
    <!-- 如果没有禁用ipv6,使用下面配置
    <listen_host>::</listen_host>
    -->
    

    Кричащие советы (1):

    Когда ipv6 отключен, если вы используете конфигурацию ::, будет сообщено о следующей ошибке

    Application: DB::Exception: Listen [::]:8123 failed: Poco::Exception. Code: 1000, e.code() =0, e.displayText() = DNS error: EAI: -9

    Кричащие советы (2):

    Номер TCP-порта ClickHouse по умолчанию — 9000. В случае конфликта портов вы можете изменить номер порта в файле **/etc/clickhouse-server/config.xml** 9001.

  • Наконец создайте его в /etcmetrika.xmlфайл, содержание выглядит следующим образом, следующая конфигурацияКонфигурация шарда без реплик, мы также можем настроить несколько реплик для шарда

    <yandex>
    <!-- 该标签与config.xml的<remote_servers incl="clickhouse_remote_servers" >保持一致
     -->    
    <clickhouse_remote_servers>
        <!-- 集群名称,可以修改 -->
        <cluster_3shards_1replicas>
            <!-- 配置三个分片,每个分片对应一台机器-->
            <shard>
                <replica>
                    <host>cdh04</host>
                    <port>9001</port>
                </replica>
            </shard>
            <shard>
                <replica>
                    <host>cdh05</host>
                    <port>9001</port>
                </replica>
            </shard>
            <shard>
                <replica>
                    <host>cdh06</host>
                    <port>9001</port>
                </replica>
            </shard>
        </cluster_3shards_1replicas>
    </clickhouse_remote_servers>
    <!-- 该标签与config.xml的<zookeeper incl="zookeeper-servers" optional="true" />
    保持一致
     --> 
    <zookeeper-servers>
        <node>
            <host>cdh02</host>
            <port>2181</port>
        </node>
        <node>
            <host>cdh03</host>
            <port>2181</port>
        </node>
        <node>
            <host>cdh06</host>
            <port>2181</port>
        </node>
    </zookeeper-servers>
    <!-- 分片和副本标识,shard标签配置分片编号,<replica>配置分片副本主机名
      需要修改对应主机上的配置-->
    <macros>
        <shard>01</shard>
        <replica>cdh04</replica>
    </macros>    
    </yandex>
    
  • Запустите clickhouse-server на соответствующих машинах

    # service clickhouse-server start
    
  • (Необязательная конфигурация) Измените файл **/etc/clickhouse-client/config.xml**

    Поскольку хостом подключения по умолчанию для clickhouse-client является localhost, а номер порта подключения по умолчанию — 9000, поскольку мы изменили номер порта по умолчанию, нам необходимо изменить номер порта подключения по умолчанию для клиента и добавить следующее содержимое в файл:

     <port>9001</port>
    

    Конечно, никаких изменений не требуется, но не забудьте добавить параметр **--port 9001**, чтобы указать номер порта для подключения при использовании клиентского подключения, иначе будет сообщено об ошибке:

    Connecting to localhost:9000 as user default.
    Code: 210. DB::NetException: Connection refused (localhost:9000)
    

Основная операция

Проверьте кластер

После завершения вышеуказанной настройки запустите clickhouse-server на соответствующем компьютере и включите clickhouse-clent.

// 启动server
# service clickhouse-server start
// 启动客户端,-m参数支持多行输入
# clickhouse-client -m

Системные таблицы можно запросить, чтобы убедиться, что конфигурация кластера загружена:

cdh04 :) select cluster,shard_num,replica_num,host_name,port,user from system.clusters;

Далее давайте взглянем на информацию о сегментировании (макропеременные) кластера: Выполните следующие команды на соответствующих машинах:

cdh04 :) select * from system.macros;
┌─macro───┬─substitution─┐
│ replica │ cdh04        │
│ shard   │ 01           │
└─────────┴──────────────┘

cdh05 :) select * from system.macros;
┌─macro───┬─substitution─┐
│ replica │ cdh05        │
│ shard   │ 02           │
└─────────┴──────────────┘

cdh06 :) select * from system.macros;
┌─macro───┬─substitution─┐
│ replica │ cdh06        │
│ shard   │ 03           │
└─────────┴──────────────┘

Распределенные операции DDL

По умолчанию операции CREATE, DROP, ALTER, RENAME действуют только на сервере, выполняющем команду в данный момент. В кластерной среде вы можете использоватьON CLUSTERоператор, чтобы он работал во всем кластере.

Например, чтобы создать распределенную таблицу:

CREATE TABLE IF NOT EXISTS user_cluster ON CLUSTER cluster_3shards_1replicas
(
    id Int32,
    name String
)ENGINE = Distributed(cluster_3shards_1replicas, default, user_local,id);

Форма определения механизма распределенной таблицы выглядит следующим образом.: Что касается движка таблиц ClickHouse, в последующих статьях будет подробно рассказано.

Distributed(cluster_name, database_name, table_name[, sharding_key])

Значение каждого параметра следующее:

  • cluster_name: имя кластера, которое соответствует пользовательскому имени в конфигурации кластера.
  • database_name:Имя базы данных
  • table_name: имя таблицы
  • sharding_key: Необязательное значение ключа, используемое для сегментирования.В процессе записи данных распределенная таблица будет распределять данные в локальную таблицу каждого узла в соответствии с правилами сегментирования ключей.

Кричать Совет:

Создание распределенной таблицыМеханизм проверки при чтении, то естьПорядок, в котором создаются распределенные и локальные таблицы, не применяется..

Также стоит отметить, что в приведенном выше операторе используется распределенный DDL ON CLUSTER, что означает, что на каждом узле сегмента кластера будет создана таблица Distributed, так что все сегменты могут быть инициированы с любого конца. запросы к срезу.

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

Далее нужно создать локальную таблицу, создать локальную таблицу на каждой машине:

CREATE TABLE IF NOT EXISTS user_local 
(
    id Int32,
    name String
)ENGINE = MergeTree()
ORDER BY id
PARTITION BY id
PRIMARY KEY id;

Сначала мы вставляем данные в таблицу user_local на машине, а затем запрашиваем таблицу user_cluster.

-- 插入数据
cdh04 :) INSERT INTO user_local VALUES(1,'tom'),(2,'jack');
-- 查询user_cluster表,可见通过user_cluster表可以操作所有的user_local表
cdh04 :) select * from user_cluster;
┌─id─┬─name─┐
│  2 │ jack │
└────┴──────┘
┌─id─┬─name─┐
│  1 │ tom  │
└────┴──────┘

Далее мы вставляем некоторые данные в user_cluster, наблюдаем за изменениями данных таблицы user_local и можем обнаружить, что данные разбросаны и хранятся на других узлах.

-- 向user_cluster插入数据
cdh04 :)  INSERT INTO user_cluster VALUES(3,'lilei'),(4,'lihua'); 
-- 查看user_cluster数据
cdh04 :) select * from user_cluster;
┌─id─┬─name─┐
│  2 │ jack │
└────┴──────┘
┌─id─┬─name──┐
│  3 │ lilei │
└────┴───────┘
┌─id─┬─name─┐
│  1 │ tom  │
└────┴──────┘
┌─id─┬─name──┐
│  4 │ lihua │
└────┴───────┘

-- 在cdh04上查看user_local
cdh04 :) select * from user_local;
┌─id─┬─name─┐
│  2 │ jack │
└────┴──────┘
┌─id─┬─name──┐
│  3 │ lilei │
└────┴───────┘
┌─id─┬─name─┐
│  1 │ tom  │
└────┴──────┘
-- 在cdh05上查看user_local
cdh05 :) select * from user_local;
┌─id─┬─name──┐
│  4 │ lihua │
└────┴───────┘

Суммировать

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