第1章 ClickHouse概述
1.1 什么是ClickHouse
ClickHouse是一个开源的,面向列的分析数据库,由Yandex为OLAP和大数据用例创建。 ClickHouse对实时查询处理的支持使其适用于需要亚秒级分析结果的应用程序。 ClickHouse的查询语言是SQL的一种方言,它支持强大的声明性查询功能,同时为最终用户提供熟悉度和较小的学习曲线。
面向列的数据库将记录存储在按列而不是行分组的块中。通过不加载查询中不存在的列的数据,面向列的数据库在完成查询时花费的时间更少。因此,对于某些工作负载(如OLAP),这些数据库可以比传统的基于行的系统更快地计算和返回结果。
在线分析处理(OLAP)系统允许组织大量数据并执行复杂查询。它们能够管理数PB的数据并快速返回查询结果。通过这种方式,OLAP对于数据科学和业务分析等领域的工作非常有用
1.2 ClickHouse与HBase对比
比较项 |
ClickHouse |
HBase |
特点 |
1.速度快,性能上超过了市面上大部分的列式存储数据库,相比传统的数据要快100-1000倍 |
1.HBase适合存储PB级别的海量数据,能在几十到百毫秒内返回数据 |
存储模式 |
不单单是一个列式数据库,也是数据库管理系统 数据有序存储、主键索引、稀疏索引、数据Sharding、数据Partitioning、TTL、主备复制 |
1.table组成 Table = rowkey + family + column + timestamp + value |
数据压缩 |
LZ4和ZSTD,LZ4在速度上会更快,但是压缩率较低,ZSTD正好相反 |
GZ(GZIP),SNAPPY,LZO,LZ4 |
存储方式 |
传统磁盘上的系统 |
基于Hadoop(HDFS),数据存储在Hadoop上 |
架构 |
支持单节点、单副本、多节点、多副本多种架构 |
HBase中的组件包括Client、Zookeeper、HMaster、HRegionServer、HRegion、Store、MemStore、StoreFile、HFile、HLog等 |
部署模式 |
单节点、集群模式(依赖Zookeeper) |
单节点、集群模式(依赖Hadoop、Zookeeper) |
分区 |
指定列分区(按天/周/月分区) |
根据rowkey,提前规划region(分区)数目,达到避免热点现象 |
sql支持 |
支持基于SQL的查询语言与SQL标准兼容,不支持窗口函数和相关子查询 |
不支持,可基于第三方框架支持(phoenix) |
集群扩展能力 |
不能自动感知集群拓扑变化,也不能自动 balance 数据(可配置权重指定大部分数据写入新的节点) |
可新增节点来对集群进行扩展,balance命令去自动调节 |
事务支持 |
不支持 |
不支持 |
优点 |
1.为了高效的使用CPU,数据不仅仅按列存储,同时还按向量进行处理 |
1.支持半结构化或非结构化数据,HBase支持动态添加列 |
缺点 |
1.不支持事务,不支持真正的删除/更新; |
1.单一RowKey固有的局限性决定了它不可能有效地支持多条件查询 |
第2章 安装
2.1 单机模式
2.1.1 从官方仓库安装
#使用脚本安装yum源
curl -s https://packagecloud.io/install/repositories/altinity/clickhouse/script.rpm.sh
#yum 安装 server 以及 client
yum install -y clickhouse-server clickhouse-client
#查看是否安装完成
sudo yum list installed 'clickhouse*'
#开机启动clickhouse-server
systemctl enable clickhouse-server
#启动clickhouse-server
systemctl start clickhouse-server
2.2 分布式集群安装
2.2.1 数据分片(Sharding)
ClickHouse支持单机模式,也支持分布式集群模式。在分布式模式下,ClickHouse会将数据分为多个分片,并且分布到不同节点上。不同的分片策略在应对不同的SQL Pattern时,各有优势。ClickHouse提供了丰富的sharding策略,让业务可以根据实际需求选用。
1)random随机分片:写入数据会被随机分发到分布式集群中的某个节点上。
2)constant固定分片:写入数据会被分发到固定一个节点上。
3)column value分片:按照某一列的值进行hash分片。
4)自定义表达式分片:指定任意合法表达式,根据表达式被计算后的值进行hash分片。
数据分片,让ClickHouse可以充分利用整个集群的大规模并行计算能力,快速返回查询结果。
更重要的是,多样化的分片功能,为业务优化打开了想象空间。比如在hash sharding的情况下,JOIN计算能够避免数据shuffle,直接在本地进行local join; 支持自定义sharding,可以为不同业务和SQL Pattern定制最适合的分片策略;利用自定义sharding功能,通过设置合理的sharding expression可以解决分片间数据倾斜问题等。
另外,sharding机制使得ClickHouse可以横向线性拓展,构建大规模分布式集群,从而具备处理海量数据的能力
2.2.2 在三台机器上面执行单机安装模式所有步骤
2.2.3 三台机器修改配置文件config.xml
[root@5gdd2~]# vim /etc/clickhouse-server/config.xml
<listen_host>::</listen_host>
<!-- <listen_host>::1</listen_host> -->
<!-- <listen_host>127.0.0.1</listen_host> -->
[root@5iicu~]# vim /etc/clickhouse-server/config.xml
<listen_host>::</listen_host>
<!-- <listen_host>::1</listen_host> -->
<!-- <listen_host>127.0.0.1</listen_host> -->
[root@5iicv~]# vim /etc/clickhouse-server/config.xml
<listen_host>::</listen_host>
<!-- <listen_host>::1</listen_host> -->
<!-- <listen_host>127.0.0.1</listen_host> -->
2.2.4 在三台机器的etc目录下新建metrika.xml文件
[root@5iicv~]# vim /etc/metrika.xml
添加如下内容:
<?xml version="1.0"?>
<yandex>
<clickhouse_remote_servers>
<myck> <!--集群名称,自定义 每个分片只有1个副本-->
<shard> <!--分片1-->
<internal_replication>true</internal_replication>
<replica>
<host>5iicv</host>
<port>9000</port>
</replica>
</shard>
<shard> <!--分片2-->
<replica>
<internal_replication>true</internal_replication>
<host>5iicu</host>
<port>9000</port>
</replica>
</shard>
<shard> <!--分片3-->
<internal_replication>true</internal_replication>
<replica>
<host>5gdd2</host>
<port>9000</port>
</replica>
</shard>
</myck>
</clickhouse_remote_servers>
<zookeeper-servers> <!--配置zookeeper集群地址-->
<node index="1">
<host>5iicv</host>
<port>2181</port>
</node>
<node index="2">
<host>5iicu</host>
<port>2181</port>
</node>
<node index="3">
<host>5gdd2</host>
<port>2181</port>
</node>
</zookeeper-servers>
<macros>
<replica>5iicv</replica>
</macros>
<networks>
<ip>::/0</ip>
</networks>
<clickhouse_compression>
<case>
<min_part_size>10000000000</min_part_size>
<min_part_size_ratio>0.01</min_part_size_ratio>
<method>lz4</method>
</case>
</clickhouse_compression>
</yandex>
注意:上面标红的地方需要根据机器不同去修改
3.3.5 三台机器安装zookeeper
1. 下载zk安装包
下载地址:http://archive.apache.org/dist/zookeeper/zookeeper-3.4.9/
2. zk配置 zookeeper-3.4.9/conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/root/apps/zookeeper-3.5.8/dataDir
clientPort=2182
autopurge.purgeInterval=0
globalOutstandingLimit=200
server.1=host1:2888:3888