ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。是现在比较火的一个大数据分析组件,可用于报表底层数据、实时数据库等场景。
ClickHouse有以下特性
- 真正的列式数据库管理系统
- 数据压缩
- 数据的磁盘存储
- 多核心并行处理
- 多服务器分布式处理
- 支持SQL
- 向量引擎
- 实时的数据更新
- 索引
- 适合在线查询
- 支持近似计算
- 自适应连接算法
- 支持数据复制和数据完整性
- 角色的访问控制
ClickHouse有以下几点不足
- 没有完整的事务支持。
- 缺少高频率,低延迟的修改或删除已存在数据的能力。仅能用于批量删除或修改数据,但这符合 GDPR。
- 稀疏索引使得ClickHouse不适合通过其键检索单行的点查询。
系统要求
ClickHouse可以在任何具有x86_64,AArch64或PowerPC64LE CPU架构的Linux,FreeBSD或Mac OS X上运行。
服务器如下,都是CentOS7.4,8c16g
192.168.0.1 bigdata-clickhouse-01
192.168.0.2 bigdata-clickhouse-02
192.168.0.3 bigdata-clickhouse-03
LInux服务器的安装步骤如下
一、下载离线包
下载地址https://packages.clickhouse.com/tgz/stable/
我下载了下面4个包:
https://packages.clickhouse.com/tgz/stable/clickhouse-client-23.4.1.1943-arm64.tgz
https://packages.clickhouse.com/tgz/stable/clickhouse-common-static-23.4.1.1943-arm64.tgz
https://packages.clickhouse.com/tgz/stable/clickhouse-common-static-dbg-23.4.1.1943-arm64.tgz
https://packages.clickhouse.com/tgz/stable/clickhouse-server-23.4.1.1943-arm64.tgz
二、解压并安装
下载后解压缩下载资源文件并使用安装脚本进行安装。我这里是参照官网,每个安装包一行命令搞定,也可以拆开多个命令执行,安装顺序是:clickhouse-common-static clickhouse-common-static-dbg clickhouse-server clickhouse-client
tar -xzvf "clickhouse-common-static-23.4.1.1943-arm64.tgz" \
|| tar -xzvf "clickhouse-common-static-23.4.1.1943.tgz"
sudo "clickhouse-common-static-23.4.1.1943/install/doinst.sh"
tar -xzvf "clickhouse-common-static-dbg-23.4.1.1943-arm64.tgz" \
|| tar -xzvf "clickhouse-common-static-dbg-23.4.1.1943.tgz"
sudo "clickhouse-common-static-dbg-23.4.1.1943/install/doinst.sh"
tar -xzvf "clickhouse-server-23.4.1.1943-arm64.tgz" \
|| tar -xzvf "clickhouse-server-23.4.1.1943.tgz"
sudo "clickhouse-server-23.4.1.1943/install/doinst.sh" configure
sudo /etc/init.d/clickhouse-server start
tar -xzvf "clickhouse-client-23.4.1.1943-arm64.tgz" \
|| tar -xzvf "clickhouse-client-23.4.1.1943.tgz"
sudo "clickhouse-client-23.4.1.1943/install/doinst.sh"
3台服务器都需要按照上面步骤安装好。
- clickhouse-client 包,包含clickhouse-client客户端,它是交互式ClickHouse控制台客户端。
- clickhouse-common 包,包含一个ClickHouse可执行文件。
- clickhouse-server 包,包含要作为服务端运行的ClickHouse配置文件。
三、修改配置文件
1.修改配置文件
文件在/etc/clickhouse-server/config.xml
我配置的是具有三个分片,每个分片一个副本的集群
<remote_servers>
<ck_cluster>
<shard>
<replica>
<host>bigdata-clickhouse-01</host>
<port>9000</port>
</replica>
</shard>
<shard>
<replica>
<host>bigdata-clickhouse-02</host>
<port>9000</port>
</replica>
</shard>
<shard>
<replica>
<host>bigdata-clickhouse-03</host>
<port>9000</port>
</replica>
</shard>
</ck_cluster>
</remote_servers>
ZooKeeper位置在配置文件中指定:
<zookeeper>
<node>
<host>bigdata-clickhouse-01</host>
<port>2181</port>
</node>
<node>
<host>bigdata-clickhouse-02</host>
<port>2181</port>
</node>
<node>
<host>bigdata-clickhouse-03</host>
<port>2181</port>
</node>
</zookeeper>
此外,我们需要设置宏来识别每个用于创建表的分片和副本:
<macros>
<shard>01</shard>
<replica>01</replica>
</macros>
2.配置用户名和密码
位置在/etc/clickhouse-server/users.xml
四、启动clickhouse
$ sudo /etc/init.d/clickhouse-server start
日志文件将输出在/var/log/clickhouse-server/
文件夹。
如果服务器没有启动,检查/etc/clickhouse-server/config.xml
中的配置。
您可以使用命令行客户端连接到它:
$ clickhouse-client --port 9100 -h 192.168.0.1 -u date_dev --password 123456
默认情况下,使用default
用户并不携带密码连接到localhost:9000
。还可以使用--host
参数连接到指定服务器。
结果如下所示:
$ ./clickhouse-client --port 9100 -h 192.168.0.1 -u date_dev --password 123456
ClickHouse client version 23.4.1.1943.
Connecting to localhost:9000.
Connected to ClickHouse server version 23.4.1.1943.
:) SELECT 1
SELECT 1
┌─1─┐
│ 1 │
└───┘
1 rows in set. Elapsed: 0.003 sec.
:)
开心,系统已经工作了!
可用如下命令查询集群信息,查看每个节点是否正常运行
select * from systems.clusters
五、建立集群表
1. 建库
其中的ck_clusterck_cluster为集群名称,是前面配置3分区时指定的集群名字,这个命令只要在任何一个节点客户端上执行即可。
CREATE DATABASE IF NOT EXISTS ck_database on cluster ck_cluster;
2.建本地表
use ck_database;
CREATE TABLE IF NOT EXISTS user_local on cluster ck_cluster
(
id Int32,
name String
)ENGINE = MergeTree()
ORDER BY id
PARTITION BY id
PRIMARY KEY id;
3.建集群分布式表
CREATE TABLE IF NOT EXISTS user_cluster ON CLUSTER ck_cluster
(
id Int32,
name String
)ENGINE = Distributed(ck_cluster, ck_database, user_local, id);
分布式引擎的格式为Distributed('集群名称'、'数据库名称'、'本地表名称'、'分片id,如果没有合适的可以用rand()')
至此,Clickhouse安装就完成了。