ClickHouse介绍
ClickHouse是一个开源的分布式列式数据库管理系统,专门用于在线分析处理(OLAP)。它被设计用于高速查询和分析大规模数据集,适用于需要进行实时分析和快速数据处理的场景。以下是关于ClickHouse的一些介绍和必要性:
1. 特点:
- 列存储:数据按列存储,这样可以更有效地处理大量数据。
- 高性能:ClickHouse优化了查询引擎来处理海量数据,速度快且稳定。
- 扩展性:支持分布式架构,可以水平扩展以应对大规模数据处理需求。
- 实时分析:适用于实时查询和分析,可快速生成报表和数据分析。
- 灵活性:支持SQL查询语言,易于使用和集成到现有系统中。
2. 必要性:
- 处理大规模数据:ClickHouse适用于需要处理大规模数据并进行实时分析的场景,如大数据分析、日志分析等。
- 实时性:对于需要快速查询和分析数据以获得实时反馈的业务,ClickHouse可以提供高效率和性能。
- 数据仓库:作为数据仓库,ClickHouse可以帮助组织存储和分析不断增长的数据,并提供快速的查询结果。
- 支持多种数据类型:ClickHouse支持各种数据类型和复杂的查询,适用于不同类型的数据分析。
- 容错和可靠性:作为分布式系统,ClickHouse具有高可用性和容错能力,确保数据的安全性和稳定性。
总的来说,ClickHouse是一种强大的工具,适合处理大量数据的实时分析和查询需求。对于那些需要高性能、可扩展性和灵活性的数据处理场景来说,ClickHouse是一个非常有必要的部署选择。
一、安装前准备
1、修改主机名
[root@node1 ~]# hostnamectl set-hostname node1
在hosts文件里面做映射
安装jdk。
二、安装zookeeper集群
1、将zookeeper的压缩包上传到/tmp目录
2、解压到/usr/local目录下
[root@node1 tmp]# tar -zxvf apache-zookeeper-3.8.0-bin.tar.gz -C /usr/local/
进入到zookeeper的conf目录,将zoo_sample.cfg复制,并且命名为zoo.cfg
[root@node1 ~]# cd /usr/local/apache-zookeeper-3.8.0-bin/conf/
[root@node1 conf]# cp zoo_sample.cfg zoo.cfg
修改zoo.cfg配置文件内容
dataDir=/data
dataLogDir=/datalog
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
server.1=10.100.1.10:2888:3888
server.2=10.100.1.11:2888:3888
server.3=10.100.1.12:2888:3888
创建数据目录和日志目录
[root@node1 conf]# mkdir /data /datalog/
配置每一台的myid
(1)、node1
echo 1 > /data/myid
(2)、node2
echo 2> /data/myid
(3)、node3
echo 3 > /data/myid
进入到zookeeper的bin目录,分别启动zookeeper
[root@node1 conf]# cd /usr/local/apache-zookeeper-3.8.0-bin/bin/
[root@node1 bin]# ./zkServer.sh start
启动后,分别查看zookeeper的状态
三、安装clickhouse集群
1、、将clickhouse的rpm包上传到/opt目录下
clickhouse-client-21.9.5.16-2.noarch.rpm
clickhouse-common-static-21.9.5.16-2.x86_64.rpm
clickhouse-common-static-dbg-21.9.5.16-2.x86_64.rpm
clickhouse-server-21.9.5.16-2.noarch.rpm
安装:
rpm -ivh *.rpm
数据存储路径修改(默认是系统盘的/var/lib/clickhouse/):
1) 在数据盘新建目录:
mkdir /data/clickhouse
2) 修改用户权限:
chown clickhouse:clickhouse /data/clickhouse
3) 软连接:
ln -s /data/clickhouse /var/lib/clickhouse
5、编辑config.xml文件,添加如下内容
[root@node1 opt]# vim /etc/clickhouse-server/config.xml
<include_from>/etc/clickhouse-server/metrika.xml</include_from>
<remote_servers incl="clickhouse_remote_servers" />
<zookeeper incl="zookeeper-servers" optional="true" />
<macros incl="macros" optional="true" />
编辑metrika.xml,复制以下内容
<yandex>
<!-- 集群配置 -->
<clickhouse_remote_servers>
<!-- 3分片1备份 -->
<cluster_3shards_1replicas>
<!-- 数据分片1 -->
<shard>
<replica>
<host>node1</host>
<port>9000</port>
<user>default</user>
<password>Szzt@2022</password>
</replica>
</shard>
<!-- 数据分片2 -->
<shard>
<replica>
<host>node2</host>
<port> 9000</port>
<user>default</user>
<password>Szzt@2022</password>
</replica>
</shard>
<!-- 数据分片3 -->
<shard>
<replica>
<host>node3</host>
<port>9000</port>
<user>default</user>
<password>Szzt@2022</password>
</replica>
</shard>
</cluster_3shards_1replicas>
</clickhouse_remote_servers>
<!---zokeeper配置 -->
<zookeeper-servers>
<node>
<host>node1</host>
<port>2181</port>
</node>
<node>
<host>node2</host>
<port>2181</port>
</node>
<node>
<host>node3</host>
<port>2181</port>
</node>
</zookeeper-servers>
<!--副本名称-->
<macros>
<replica>node3</replica>
</macros>
<networks>
<ip>::/0</ip>
</networks>
</yandex>
9、启动clickhouse服务
[root@node1 opt]# systemctl start clickhouse-server
10、登录clickhouse客户端
[root@node1 opt]# clickhouse-client -u default --password 123456
11、查看集群状态,对比集群名称是否正确
node1 :) select * from system.clusters;
四、clickhouse操作
1、集群分片与备份测试
(1)、创建集群测试仓库(node1操作)
create database testdb on cluster cluster_3shards_1replicas;
(2)、查看数据库
show databases;
(3)、创建本地表(node1操作)
create table testdb.person_local on cluster cluster_3shards_1replicas (ID Int8, Name String, BirthDate Date) ENGINE = MergeTree(BirthDate, (Name, BirthDate), 8192)
(4)、在各个节点建分布表(所有节点操作)
create table testdb.person_all as testdb.person_local ENGINE = Distributed(cluster_3shards_1replicas, testdb, person_local, rand());
person_local为本地表,数据只是在本地
person_all为分布表,查询这个表,引擎自动把整个集群数据计算后返回
(5)、插入数据(node1操作)
insert into testdb.person_all (*) values ('1','a','2021-10-01');
insert into testdb.person_all (*) values ('2','b','2021-10-01');
insert into testdb.person_all (*) values ('3','c','2021-10-01');
insert into testdb.person_all (*) values ('4','d','2021-10-01');
insert into testdb.person_all (*) values ('5','e','2021-10-01');
insert into testdb.person_all (*) values ('6','f','2021-10-01');
insert into testdb.person_all (*) values ('7','g','2021-10-01');
insert into testdb.person_all (*) values ('9','i','2021-10-01');
insert into testdb.person_all (*) values ('10','j','2021-10-01');
(6)、查看数据
select * from testdb.person_local
selec * from testdb.person_all