参考:https://blog.csdn.net/qq_37933018/article/details/108019566
Clickhouse官网:https://clickhouse.tech/
Clickhouse中文官网:https://clickhouse.tech/docs/zh/
1、什么是Clickhouse?
答:ClickHouse是俄罗斯的Yandex于2016年开源的一个用于联机分析(OLAP:Online Analytical Processing)的列式数据库管理系统(DBMS : Database Management System),简称CK , 主要用于在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告。 ClickHouse是一个完全的列式数据库管理系统。ClickHouse的全称是Click Stream, Data WareHouse,简称为ClickHouse。允许在运行时创建表和数据库,加载数据和运行查询,而无需重新配置和重新启动服务器,支持线性扩展,简单方便,高可靠性,容错。它在大数据领域没有走 Hadoop 生态,而是采用 Local attached storage 作为存储,这样整个 IO 可能就没有 Hadoop 那一套的局限。它的系统在生产环境中可以应用到比较大的规模,因为它的线性扩展能力和可靠性保障能够原生支持 shard分片 replication副本 这种解决方案。它还提供了一些 SQL 直接接口,有比较丰富的原生 client。另外就是它比较快。
2、选择ClickHouse 的首要原因是它比较快,但其实它的技术没有什么新的地方,为什么会快?主要有四个方面的因素:
答:1)、它的数据剪枝能力比较强,分区剪枝在执行层,而存储格式用局部数据表示,就可以更细粒度地做一些数据的剪枝。它的引擎在实际使用中应用了一种现在比较流行的 LSM 方式。 2)、它对整个资源的垂直整合能力做得比较好,并发 MPP SMP这种执行方式可以很充分地利用机器的集成资源。它的实现又做了很多性能相关的优化,它的一个简单的汇聚操作有很多不同的版本,会根据不同 Key 的组合方式有不同的实现。对于高级的计算指令,数据解压时,它也有少量使用。 3)、ClickHouse 是一套完全由 C 模板 Code 写出来的实现,代码还是比较优雅的。 4)、ClickHouse是一个完全的列式数据库。
3、什么是OLAP?
答:联机分析处理OLAP是一种软件技术,它使分析人员能够迅速、一致、交互地从各个方面观察信息,以达到深入理解数据的目的。它具有FASMI(Fast Analysis of Shared Multidimensional Information),即共享多维信息的快速分析的特征。其中F是快速性(Fast),指系统能在数秒内对用户的多数分析要求做出反应;A是可分析性(Analysis),指用户无需编程就可以定义新的专门计算,将其作为分析的一部 分,并以用户所希望的方式给出报告;M是多维性(Multi—dimensional),指提供对数据分析的多维视图和分析;是信息性(Information),指能及时获得信息,并且管理大容量信息!
1)、OLAP展现在用户面前的是一幅幅多维视图。维(Dimension):是人们观察数据的特定角度,是考虑问题时的一类属性,属性集合构成一个维(时间维、地理维等)。 2)、维的层次(Level):人们观察数据的某个特定角度(即某个维)还可以存在细节程度不同的各个描述方面(时间维:日期、月份、季度、年)。 3)、维的成员(Member):维的一个取值,是数据项在某维中位置的描述。(“某年某月某日”是在时间维上位置的描述)。 4)、度量(Measure):多维数组的取值。(2000年1月,上海,笔记本电脑,0000)。 5)、OLAP的基本多维分析操作有钻取(Drill-up和Drill-down)、切片(Slice)和切块(Dice)、以及旋转(Pivot)等。 6)、钻取:是改变维的层次,变换分析的粒度。它包括向下钻取(Drill-down)和向上钻取(Drill-up)/上卷(Roll-up)。Drill-up是在某一维上将低层次的细节数据概括到高层次的汇总数据,或者减少维数;而Drill-down则相反,它从汇总数据深入到细节数据进行观察或增加新维。 7)、切片和切块:是在一部分维上选定值后,关心度量数据在剩余维上的分布。如果剩余的维只有两个,则是切片;如果有三个或以上,则是切块。 8)、旋转:是变换维的方向,即在表格中重新安排维的放置(例如行列互换)。
4、Clickhouse的优缺点?
4.1、Clickhouse的优点,如下所示:
1)、为了高效的使用CPU,数据不仅仅按列存储,同时还按向量进行处理。 2)、数据压缩空间大,减少IO;处理单查询高吞吐量每台服务器每秒最多数十亿行。 3)、索引非B树结构,不需要满足最左原则;只要过滤条件在索引列中包含即可;即使在使用的数据不在索引中,由于各种并行处理机制ClickHouse全表扫描的速度也很快。 4)、写入速度非常快,50-200M/s,对于大量的数据更新非常适用。
4.2、Clickhouse的缺点,如下所示:
1)、不支持事务,不支持真正的删除/更新; 2)、不支持高并发,官方建议qps为100,可以通过修改配置文件增加连接数,但是在服务器足够好的情况下; 3)、不支持真正的删除/更新支持 不支持事务(期待后续版本支持) 4)、不支持二级索引 5)、有限的SQL支持,join实现与众不同 6)、不支持窗口功能 7)、元数据管理需要人工干预维护 8)、SQL满足日常使用80%以上的语法,join写法比较特殊;最新版已支持类似SQL的join,但性能不好; 9)、尽量做1000条以上批量的写入,避免逐行insert或小批量的insert,update,delete操作,因为ClickHouse底层会不断的做异步的数据合并,会影响查询性能,这个在做实时数据写入的时候要尽量避开; 10)、ClickHouse快是因为采用了并行处理机制,即使一个查询,也会用服务器一半的CPU去执行,所以ClickHouse不能支持高并发的使用场景,默认单查询使用CPU核数为服务器核数的一半,安装时会自动识别服务器核数,可以通过配置文件修改该参数。
5、Clickhouse的特点。
1)、真正的列式数据库管理系统。
在一个真正的列式数据库管理系统中,除了数据本身外不应该存在其他额外的数据。这意味着为了避免在值旁边存储它们的长度«number»,你必须支持固定长度数值类型。例如,10亿个UInt8类型的数据在未压缩的情况下大约消耗1GB左右的空间,如果不是这样的话,这将对CPU的使用产生强烈影响。即使是在未压缩的情况下,紧凑的存储数据也是非常重要的,因为解压缩的速度主要取决于未压缩数据的大小。 这是非常值得注意的,因为在一些其他系统中也可以将不同的列分别进行存储,但由于对其他场景进行的优化,使其无法有效的处理分析查询。例如: HBase,BigTable,Cassandra,HyperTable。在这些系统中,你可以得到每秒数十万的吞吐能力,但是无法得到每秒几亿行的吞吐能力。 需要说明的是,ClickHouse不单单是一个数据库, 它是一个数据库管理系统。因为它允许在运行时创建表和数据库、加载数据和运行查询,而无需重新配置或重启服务。 2)、数据压缩。
在一些列式数据库管理系统中(例如:InfiniDB CE 和 MonetDB) 并没有使用数据压缩。但是, 若想达到比较优异的性能,数据压缩确实起到了至关重要的作用。 3)、数据的磁盘存储。
许多的列式数据库(如 SAP HANA, Google PowerDrill)只能在内存中工作,这种方式会造成比实际更多的设备预算。ClickHouse被设计用于工作在传统磁盘上的系统,它提供每GB更低的存储成本,但如果有可以使用SSD和内存,它也会合理的利用这些资源。 4)、多核心并行处理。
ClickHouse会使用服务器上一切可用的资源,从而以最自然的方式并行处理大型查询。
5)、多服务器分布式处理。
上面提到的列式数据库管理系统中,几乎没有一个支持分布式的查询处理。 在ClickHouse中,数据可以保存在不同的shard上,每一个shard都由一组用于容错的replica组成,查询可以并行地在所有shard上进行处理。这些对用户来说是透明的。
6)、支持SQL。
ClickHouse支持基于SQL的声明式查询语言,该语言大部分情况下是与SQL标准兼容的。支持的查询包括 GROUP BY,ORDER BY,IN,JOIN以及非相关子查询。不支持窗口函数和相关子查询。
7)、向量引擎。
为了高效的使用CPU,数据不仅仅按列存储,同时还按向量(列的一部分)进行处理,这样可以更加高效地使用CPU。
8)、实时的数据更新。
ClickHouse支持在表中定义主键。为了使查询能够快速在主键中进行范围查找,数据总是以增量的方式有序的存储在MergeTree中。因此,数据可以持续不断地高效的写入到表中,并且写入的过程中不会存在任何加锁的行为。
9)、索引。
按照主键对数据进行排序,这将帮助ClickHouse在几十毫秒以内完成对数据特定值或范围的查找。
10)、适合在线查询。
在线查询意味着在没有对数据做任何预处理的情况下以极低的延迟处理查询并将结果加载到用户的页面中。
11)、支持近似计算。ClickHouse提供各种各样在允许牺牲数据精度的情况下对查询进行加速的方法:
a)、用于近似计算的各类聚合函数,如:distinct values, medians, quantiles b)、基于数据的部分样本进行近似查询。这时,仅会从磁盘检索少部分比例的数据。 c)、不使用全部的聚合条件,通过随机选择有限个数据聚合条件进行聚合。这在数据聚合条件满足某些分布条件下,在提供相当准确的聚合结果的同时降低了计算资源的使用。
12)、支持数据复制和数据完整性。
ClickHouse使用异步的多主复制技术。当数据被写入任何一个可用副本后,系统会在后台将数据分发给其他副本,以保证系统在不同副本上保持相同的数据。在大多数情况下ClickHouse能在故障后自动恢复,在一些少数的复杂情况下需要手动恢复。 6、Clickhouse的性能。
1)、单个查询吞吐量:如果数据被放置在page cache中,则一个不太复杂的查询在单个服务器上大约能够以2-10GB/s(未压缩)的速度进行处理(对于简单的查询,速度可以达到30GB/s)。如果数据没有在page cache中的话,那么速度将取决于你的磁盘系统和数据的压缩率。例如,如果一个磁盘允许以400MB/s的速度读取数据,并且数据压缩率是3,则数据的处理速度为1.2GB/s。这意味着,如果你是在提取一个10字节的列,那么它的处理速度大约是1-2亿行每秒。对于分布式处理,处理速度几乎是线性扩展的,但这受限于聚合或排序的结果不是那么大的情况下。
2)、处理短查询的延时时间:数据被page cache缓存的情况下,它的延迟应该小于50毫秒(最佳情况下应该小于10毫秒)。 否则,延迟取决于数据的查找次数。延迟可以通过以下公式计算得知: 查找时间(10 ms) * 查询的列的数量 * 查询的数据块的数量。
3)、处理大量短查询:ClickHouse可以在单个服务器上每秒处理数百个查询(在最佳的情况下最多可以处理数千个)。但是由于这不适用于分析型场景。建议每秒最多查询100次。
4)、数据写入性能:建议每次写入不少于1000行的批量写入,或每秒不超过一个写入请求。当使用tab-separated格式将一份数据写入到MergeTree表中时,写入速度大约为50到200MB/s。如果您写入的数据每行为1Kb,那么写入的速度为50,000到200,000行每秒。如果您的行更小,那么写入速度将更高。为了提高写入性能,您可以使用多个INSERT进行并行写入,这将带来线性的性能提升。
代码语言:javascript复制1 count: 千万级别,500毫秒,1亿 800毫秒 2亿 900毫秒 3亿 1.1秒
2 group: 百万级别 200毫米,千万 1秒,1亿 10秒,2亿 20秒,3亿 30秒
3 join:千万-10万 600 毫秒, 千万 -百万:10秒,千万-千万 150秒
5)、ClickHouse并非无所不能,查询语句需要不断的调优,可能与查询条件有关,不同的查询条件表是左join还是右join也是很有讲究的。
a)、MySQL单条SQL是单线程的,只能跑满一个core,ClickHouse相反,有多少CPU,吃多少资源,所以飞快; b)、ClickHouse不支持事务,不存在隔离级别。ClickHouse的定位是分析性数据库,而不是严格的关系型数据库。 c)、IO方面,MySQL是行存储,ClickHouse是列存储,后者在count()这类操作天然有优势,同时,在IO方面,MySQL需要大量随机IO,ClickHouse基本是顺序IO。
d)、有人可能觉得上面的数据导入的时候,数据肯定缓存在内存里了,这个的确,但是ClickHouse基本上是顺序IO。对IO基本没有太高要求,当然,磁盘越快,上层处理越快,但是99%的情况是,CPU先跑满了(数据库里太少见了,大多数都是IO不够用)。 7、Clickhouse的应用场景。
1)、绝大多数请求都是用于读访问的。 2)、数据需要以大批次(大于1000行)进行更新,而不是单行更新;或者根本没有更新操作。 3)、数据只是添加到数据库,没有必要修改。 4)、读取数据时,会从数据库中提取出大量的行,但只用到一小部分列。 5)、表很“宽”,即表中包含大量的列。 6)、查询频率相对较低(通常每台服务器每秒查询数百次或更少)。 7)、对于简单查询,允许大约50毫秒的延迟。 8)、列的值是比较小的数值和短字符串(例如,每个URL只有60个字节)。 9)、在处理单个查询时需要高吞吐量(每台服务器每秒高达数十亿行)。 10)、不需要事务。 11)、数据一致性要求较低。 12)、每次查询中只会查询一个大表。除了一个大表,其余都是小表。 13)、查询结果显著小于数据源。即数据有过滤或聚合。返回结果不超过单个服务器内存大小。 8、Clickhouse的单体架构,如下所示:
在单节点上安装好CH以后,启动CH的服务以后,可以使用CH提供的客户端交互窗口进行操作,可以操作数据库,表 , 表中的数据。同时CH也支持和其他数据源的对接,CH可以将整个表中的数据缓存在内存中,方便快速查询,分析计算结果,也可将数据存储在本地磁盘的执行目录中, 不同引擎的表存储的位置和结构不同。
9、Clickhouse的集群架构,如下所示:
ClickHouse集群模式中依赖ZooKeeper工作。ZK的作用主要分为两大类:分布式DDL执行、ReplicatedMergeTree表主备节点之间的状态同步。
10、 ClickHouse的基本概念。
1)、 ClickHouse的列式存储,相比于行式存储,列式存储在分析场景下有着许多优良的特性。
a)、如前所述,分析场景中往往需要读大量行但是少数几个列。在行存模式下,数据按行连续存储,所有列的数据都存储在一个block中,不参与计算的列在IO时也要全部读出,读取操作被严重放大。而列存模式下,只需要读取参与计算的列即可,极大的减低了IO cost,加速了查询。 b)、同一列中的数据属于同一类型,压缩效果显著。列存储往往有着高达十倍甚至更高的压缩比,节省了大量的存储空间,降低了存储成本。 c)、更高的压缩比意味着更小的data size,从磁盘中读取相应数据耗时更短。 d)、自由的压缩算法选择。不同列的数据具有不同的数据类型,适用的压缩算法也就不尽相同。可以针对不同列类型,选择最合适的压缩算法。 e)、高压缩比,意味着同等大小的内存能够存放更多数据,系统cache效果更好。官方数据显示,通过使用列存储,在某些分析场景下,能够获得100倍甚至更高的加速效应。
2)、ClickHouse的向量化(算法)。
ClickHouse不仅将数据按列存储,而且按列进行计算。传统OLTP数据库通常采用按行计算,原因是事务处理中以点查为主,SQL计算量小,实现这些技术的收益不够明显。但是在分析场景下,单个SQL所涉及计算量可能极大,将每行作为一个基本单元进行处理会带来严重的性能损耗:
a)、对每一行数据都要调用相应的函数,函数调用开销占比高; b)、存储层按列存储数据,在内存中也按列组织,但是计算层按行处理,无法充分利用CPU cache的预读能力,造成CPU Cache miss严重; c)、按行处理,无法利用高效的SIMD指令。
ClickHouse实现了向量执行引擎(Vectorized execution engine),对内存中的列式数据,一个batch调用一次SIMD指令(而非每一行调用一次),不仅减少了函数调用次数、降低了cache miss,而且可以充分发挥SIMD指令的并行能力,大幅缩短了计算耗时。向量执行引擎,通常能够带来数倍的性能提升。
(SIMD全称Single Instruction Multiple Data,单指令多数据流,能够复制多个操作数,并把它们打包在大型寄存器的一组指令集。以同步方式,在同一时间内执行同一条指令。)
3)、ClickHouse的表,有表名和表结构。
4)、ClickHouse的分片。
a)、ClickHouse的集群由分片 ( Shard ) 组成,而每个分片又通过副本 ( Replica ) 组成。这种分层的概念,在一些流行的分布式系统中十分普遍。例如,在Elasticsearch的概念中,一个索引由分片和副本组成,副本可以看作一种特殊的分片。如果一个索引由5个分片组成,副本的基数是1,那么这个索引一共会拥有10个分片 ( 每1个分片对应1个副本 )。 b)、如果你用同样的思路来理解ClickHouse的分片,那么很可能会在这里栽个跟头。ClickHouse的某些设计总是显得独树一帜,而集群与分片就是其中之一。这里有几个与众不同的特性。 c)、ClickHouse的1个节点只能拥有1个分片,也就是说如果要实现1分片、1副本,则至少需要部署2个服务节点。 d)、分片只是一个逻辑概念(类似于Hbase中的region的概念,表的范围数据),其物理承载还是由副本承担的。
5)、ClickHouse的分区。
ClickHouse支持PARTITION BY子句,在建表时可以指定按照任意合法表达式进行数据分区操作,比如通过toYYYYMM()将数据按月进行分区、toMonday()将数据按照周几进行分区、对Enum类型的列直接每种取值作为一个分区等。类似于hive中的分区。
6)、ClickHouse的副本。
数据存储副本,在集群模式下实现高可用!!
7)、ClickHouse的引擎。
就是表的类型,不同的表有不同的特点,不同引擎决定表的数据存储位置和数据存储特点!!
11、Clickhouse的单机安装,如下所示:
1)、Clickhouse是mpp多主架构,mpp架构相对简单,节点相互独立,使用zookeeper协调工具进行相互联系,可以先单节点安装,后期再多安装几个节点,并不需要配置节点之间关联性的配置,都找zookeeper进行通信即可。
2)、Clickhouse可以集成hdfs、mysql等等。
3)、Clickhouse是一个DBMS系统,可以创建数据库、数据表,执行SQL。
4)、Clickhouse是一个列式存储,实现编程语言是C ,十分高效。
5)、处理数据速度快。可以进行横向扩展,高可靠的。
6)、关于行式存储、列式存储的效果图,官网给出一个案例,还是很形象的。
行式存储,如下所示:
列式存储,如下所示:
首先,安装curl工具,如下所示:
代码语言:javascript复制 1 [root@master package]# yum install -y curl
2 已加载插件:fastestmirror, langpacks
3 Loading mirror speeds from cached hostfile
4 * base: mirrors.aliyun.com
5 * extras: mirrors.huaweicloud.com
6 * updates: mirrors.aliyun.com
7 base | 3.6 kB 00:00:00
8 extras | 2.9 kB 00:00:00
9 updates | 2.9 kB 00:00:00
10 updates/7/x86_64/primary_db | 4.7 MB 00:00:05
11 正在解决依赖关系
12 --> 正在检查事务
13 ---> 软件包 curl.x86_64.0.7.29.0-59.el7 将被 升级
14 ---> 软件包 curl.x86_64.0.7.29.0-59.el7_9.1 将被 更新
15 --> 正在处理依赖关系 libcurl = 7.29.0-59.el7_9.1,它被软件包 curl-7.29.0-59.el7_9.1.x86_64 需要
16 --> 正在检查事务
17 ---> 软件包 libcurl.x86_64.0.7.29.0-59.el7 将被 升级
18 ---> 软件包 libcurl.x86_64.0.7.29.0-59.el7_9.1 将被 更新
19 --> 解决依赖关系完成
20
21 依赖关系解决
22
23 =====================================================================================================================================================================
24 Package 架构 版本 源 大小
25 =====================================================================================================================================================================
26 正在更新:
27 curl x86_64 7.29.0-59.el7_9.1 updates 271 k
28 为依赖而更新:
29 libcurl x86_64 7.29.0-59.el7_9.1 updates 223 k
30
31 事务概要
32 =====================================================================================================================================================================
33 升级 1 软件包 ( 1 依赖软件包)
34
35 总下载量:494 k
36 Downloading packages:
37 No Presto metadata available for updates
38 警告:/var/cache/yum/x86_64/7/updates/packages/curl-7.29.0-59.el7_9.1.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
39 curl-7.29.0-59.el7_9.1.x86_64.rpm 的公钥尚未安装
40 (1/2): curl-7.29.0-59.el7_9.1.x86_64.rpm | 271 kB 00:00:00
41 (2/2): libcurl-7.29.0-59.el7_9.1.x86_64.rpm | 223 kB 00:00:00
42 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------
43 总计 1.5 MB/s | 494 kB 00:00:00
44 从 file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 检索密钥
45 导入 GPG key 0xF4A80EB5:
46 用户ID : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>"
47 指纹 : 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
48 软件包 : centos-release-7-9.2009.0.el7.centos.x86_64 (@anaconda)
49 来自 : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
50 Running transaction check
51 Running transaction test
52 Transaction test succeeded
53 Running transaction
54 正在更新 : libcurl-7.29.0-59.el7_9.1.x86_64 1/4
55 正在更新 : curl-7.29.0-59.el7_9.1.x86_64 2/4
56 清理 : curl-7.29.0-59.el7.x86_64 3/4
57 清理 : libcurl-7.29.0-59.el7.x86_64 4/4
58 验证中 : curl-7.29.0-59.el7_9.1.x86_64 1/4
59 验证中 : libcurl-7.29.0-59.el7_9.1.x86_64 2/4
60 验证中 : libcurl-7.29.0-59.el7.x86_64 3/4
61 验证中 : curl-7.29.0-59.el7.x86_64 4/4
62
63 更新完毕:
64 curl.x86_64 0:7.29.0-59.el7_9.1
65
66 作为依赖被升级:
67 libcurl.x86_64 0:7.29.0-59.el7_9.1
68
69 完毕!
70 [root@master package]#
添加clickhouse的yum镜像,如下所示:
代码语言:javascript复制 1 [root@master package]# curl -s https://packagecloud.io/install/repositories/altinity/clickhouse/script.rpm.sh | sudo bash
2 Detected operating system as centos/7.
3 Checking for curl...
4 Detected curl...
5 Downloading repository file: https://packagecloud.io/install/repositories/Altinity/clickhouse/config_file.repo?os=centos&dist=7&source=script
6 done.
7 Installing pygpgme to verify GPG signatures...
8 已加载插件:fastestmirror, langpacks
9 Loading mirror speeds from cached hostfile
10 * base: mirrors.huaweicloud.com
11 * extras: mirrors.huaweicloud.com
12 * updates: mirrors.huaweicloud.com
13 Altinity_clickhouse-source/signature | 833 B 00:00:00
14 从 https://packagecloud.io/Altinity/clickhouse/gpgkey 检索密钥
15 导入 GPG key 0x0F6E36F6:
16 用户ID : "https://packagecloud.io/altinity/clickhouse (https://packagecloud.io/docs#gpg_signing) <support@packagecloud.io>"
17 指纹 : 7001 38a9 6a20 6b22 bf28 3c06 ed26 58f3 0f6e 36f6
18 来自 : https://packagecloud.io/Altinity/clickhouse/gpgkey
19 Altinity_clickhouse-source/signature | 1.0 kB 00:00:00 !!!
20 Altinity_clickhouse-source/primary | 175 B 00:00:03
21 软件包 pygpgme-0.3-9.el7.x86_64 已安装并且是最新版本
22 无须任何处理
23 Installing yum-utils...
24 已加载插件:fastestmirror, langpacks
25 Loading mirror speeds from cached hostfile
26 * base: mirrors.bfsu.edu.cn
27 * extras: mirror.bit.edu.cn
28 * updates: mirrors.bfsu.edu.cn
29 软件包 yum-utils-1.1.31-54.el7_8.noarch 已安装并且是最新版本
30 无须任何处理
31 Generating yum cache for Altinity_clickhouse...
32 导入 GPG key 0x0F6E36F6:
33 用户ID : "https://packagecloud.io/altinity/clickhouse (https://packagecloud.io/docs#gpg_signing) <support@packagecloud.io>"
34 指纹 : 7001 38a9 6a20 6b22 bf28 3c06 ed26 58f3 0f6e 36f6
35 来自 : https://packagecloud.io/Altinity/clickhouse/gpgkey
36 Generating yum cache for Altinity_clickhouse-source...
37
38 The repository is setup! You can now install packages.
39 [root@master package]#
检查镜像情况,如下所示:
安装包列表: clickhouse-common-static — ClickHouse编译的二进制文件。 clickhouse-server — 创建clickhouse-server软连接,并安装默认配置服务 clickhouse-client — 创建clickhouse-client客户端工具软连接,并安装客户端配置文件。 clickhouse-common-static-dbg — 带有调试信息的ClickHouse二进制文件。
代码语言:javascript复制 1 [root@master package]# yum list | grep clickhouse
2 clickhouse-client.x86_64 20.8.3.18-1.el7 Altinity_clickhouse
3 clickhouse-common-static.x86_64 20.8.3.18-1.el7 Altinity_clickhouse
4 clickhouse-debuginfo.x86_64 20.1.11.73-1.el7 Altinity_clickhouse
5 clickhouse-odbc.x86_64 1.1.9-1.el7 Altinity_clickhouse
6 clickhouse-server.x86_64 20.8.3.18-1.el7 Altinity_clickhouse
7 clickhouse-server-common.x86_64 20.8.3.18-1.el7 Altinity_clickhouse
8 clickhouse-test.x86_64 20.8.3.18-1.el7 Altinity_clickhouse
9 clicktail.x86_64 1.0.20180401-1 Altinity_clickhouse
10 [root@master package]#
安装clickhouse的服务端和客户端,使用yum安装,yum可以解决依赖关系,如下所示:
代码语言:javascript复制 1 [root@master ~]# yum install -y clickhouse-server clickhouse-client
2 已加载插件:fastestmirror, langpacks
3 Loading mirror speeds from cached hostfile
4 * base: mirrors.huaweicloud.com
5 * extras: mirrors.huaweicloud.com
6 * updates: mirrors.huaweicloud.com
7 Altinity_clickhouse/x86_64/signature | 833 B 00:00:00
8 Altinity_clickhouse/x86_64/signature | 1.0 kB 00:00:00 !!!
9 Altinity_clickhouse-source/signature | 833 B 00:00:00
10 Altinity_clickhouse-source/signature | 1.0 kB 00:00:00 !!!
11 正在解决依赖关系
12 --> 正在检查事务
13 ---> 软件包 clickhouse-client.x86_64.0.20.8.3.18-1.el7 将被 安装
14 ---> 软件包 clickhouse-server.x86_64.0.20.8.3.18-1.el7 将被 安装
15 --> 正在处理依赖关系 clickhouse-server-common = 20.8.3.18-1.el7,它被软件包 clickhouse-server-20.8.3.18-1.el7.x86_64 需要
16 --> 正在处理依赖关系 clickhouse-common-static = 20.8.3.18-1.el7,它被软件包 clickhouse-server-20.8.3.18-1.el7.x86_64 需要
17 --> 正在检查事务
18 ---> 软件包 clickhouse-common-static.x86_64.0.20.8.3.18-1.el7 将被 安装
19 ---> 软件包 clickhouse-server-common.x86_64.0.20.8.3.18-1.el7 将被 安装
20 --> 解决依赖关系完成
21
22 依赖关系解决
23
24 =====================================================================================================================================================================
25 Package 架构 版本 源 大小
26 =====================================================================================================================================================================
27 正在安装:
28 clickhouse-client x86_64 20.8.3.18-1.el7 Altinity_clickhouse 6.2 k
29 clickhouse-server x86_64 20.8.3.18-1.el7 Altinity_clickhouse 35 M
30 为依赖而安装:
31 clickhouse-common-static x86_64 20.8.3.18-1.el7 Altinity_clickhouse 66 M
32 clickhouse-server-common x86_64 20.8.3.18-1.el7 Altinity_clickhouse 14 k
33
34 事务概要
35 =====================================================================================================================================================================
36 安装 2 软件包 ( 2 依赖软件包)
37
38 总下载量:101 M
39 安装大小:547 M
40 Downloading packages:
41 (1/4): clickhouse-client-20.8.3.18-1.el7.x86_64.rpm | 6.2 kB 00:00:01
42 (2/4): clickhouse-common-static-20.8.3.18-1.el7.x86_64.rpm | 66 MB 00:00:33
43 (3/4): clickhouse-server-common-20.8.3.18-1.el7.x86_64.rpm | 14 kB 00:00:00
44 (4/4): clickhouse-server-20.8.3.18-1.el7.x86_64.rpm | 35 MB 00:00:44
45 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------
46 总计 2.2 MB/s | 101 MB 00:00:45
47 Running transaction check
48 Running transaction test
49 Transaction test succeeded
50 Running transaction
51 正在安装 : clickhouse-common-static-20.8.3.18-1.el7.x86_64 1/4
52 正在安装 : clickhouse-server-common-20.8.3.18-1.el7.x86_64 2/4
53 正在安装 : clickhouse-server-20.8.3.18-1.el7.x86_64 3/4
54 Create user clickhouse.clickhouse with datadir /var/lib/clickhouse
55 正在安装 : clickhouse-client-20.8.3.18-1.el7.x86_64 4/4
56 Create user clickhouse.clickhouse with datadir /var/lib/clickhouse
57 验证中 : clickhouse-server-common-20.8.3.18-1.el7.x86_64 1/4
58 验证中 : clickhouse-common-static-20.8.3.18-1.el7.x86_64 2/4
59 验证中 : clickhouse-client-20.8.3.18-1.el7.x86_64 3/4
60 验证中 : clickhouse-server-20.8.3.18-1.el7.x86_64 4/4
61
62 已安装:
63 clickhouse-client.x86_64 0:20.8.3.18-1.el7 clickhouse-server.x86_64 0:20.8.3.18-1.el7
64
65 作为依赖被安装:
66 clickhouse-common-static.x86_64 0:20.8.3.18-1.el7 clickhouse-server-common.x86_64 0:20.8.3.18-1.el7
67
68 完毕!
69 [root@master ~]#
启动clickhouse服务daunt,如下所示:
代码语言:javascript复制1 [root@master ~]# service clickhouse-server start
2 Start clickhouse-server service: Path to data directory in /etc/clickhouse-server/config.xml: /var/lib/clickhouse/
3 DONE
4 [root@master ~]#
关闭clickhouse服务的命令,service clickhouse-server stop。
启动交互式客户端,客户端支持的参数,如下所示:
1)、--host,-h,服务端的host名称,默认是localhost。 2)、--port,连接的端口,默认值是9000。 3)、--user,-u,用户名称,默认值是default。 4)、--password,密码,默认值是空字符串。 5)、--query,-q,非交互模式下的查询语句。 6)、--databases,-d,默认当前操作的数据库,默认值是default。 7)、--multiline,-m,允许多行语句查询。 8)、--format,-f,使用指定的默认格式输出结果。 9)、--time,-t,非交互模式下会打印查询执行的时间到窗口。 10)、--stacktrace,如果出现异常,会打印堆栈跟踪信息。 11)、--config-file,配置文件的名称。
代码语言:javascript复制 1 [root@master ~]# clickhouse-client -m # -m参数可以让输入多行,即换行之后也可以继续输入
2 ClickHouse client version 20.8.3.18.
3 Connecting to localhost:9000 as user default.
4 Connected to ClickHouse server version 20.8.3 revision 54438.
5
6 master :) select 1
7 :-] ;
8
9 SELECT 1
10
11 ┌─1─┐
12 │ 1 │
13 └───┘
14
15 1 rows in set. Elapsed: 0.010 sec.
16
17 master :) select 1 1;
18
19 SELECT 1 1
20
21 ┌─plus(1, 1)─┐
22 │ 2 │
23 └────────────┘
24
25 1 rows in set. Elapsed: 0.007 sec.
26
27 master :)
查看数据库信息,如下所示:
代码语言:javascript复制 1 master :)
2 master :) show databases;
3
4 SHOW DATABASES
5
6 ┌─name───────────────────────────┐
7 │ _temporary_and_external_tables │
8 │ default │
9 │ system │
10 └────────────────────────────────┘
11
12 3 rows in set. Elapsed: 0.006 sec.
13
14 master :)
12、Clickhouse集群安装。
Clickhouse的集群安装就是在每台机器上安装Clickhouse的服务端以及客户端,所以在每台机器上重复单机安装步骤。
1)、修改/etc/clickhouse-server/目录下的config.xml。
代码语言:javascript复制1 <listen_host>::</listen_host>
2 <!-- <listen_host>::1</listen_host> -->
3 <!-- <listen_host>127.0.0.1</listen_host> -->
2)、将修改好的配置文件分发到其他Clickhouse节点上。 3)、在/etc/下创建集群配置文件metrika.xml文件(这个文件需要创建),在Clickhouse启动的时候会加载这个配置文件以集群的形式启动Clickhouse。
4)、metrika.xml文件配置内容,如下所示:
代码语言:javascript复制 1 <clickhouse_remote_servers>
2 <doit_ch_cluster1>
3 <shard>
4 <internal_replication>true</internal_replication>
5 <replica>
6 <host>master</host>
7 <port>9000</port>
8 </replica>
9 </shard>
10 <shard>
11 <replica>
12 <internal_replication>true</internal_replication>
13 <host>master2</host>
14 <port>9000</port>
15 </replica>
16 </shard>
17 <shard>
18 <internal_replication>true</internal_replication>
19 <replica>
20 <host>master3</host>
21 <port>9000</port>
22 </replica>
23 </shard>
24 </doit_ch_cluster1>
25 </clickhouse_remote_servers>
26
27
28 <zookeeper-servers>
29 <node index="1">
30 <host>master</host>
31 <port>2181</port>
32 </node>
33
34 <node index="2">
35 <host>master2</host>
36 <port>2181</port>
37 </node>
38 <node index="3">
39 <host>master3</host>
40 <port>2181</port>
41 </node>
42 </zookeeper-servers>
43
44 <macros>
45 <replica>doit01</replica>
46 </macros>
47 <networks>
48 <ip>::/0</ip>
49 </networks>
50
51 <clickhouse_compression>
52 <case>
53 <min_part_size>10000000000</min_part_size>
54 <min_part_size_ratio>0.01</min_part_size_ratio>
55 <method>lz4</method>
56 </case>
57 </clickhouse_compression>
58
59 </yandex>
在每台机器上启动Clickhouse服务,以集群的形式启动,如果想要再以单节点的形式启动那么就删除/etc/下的metrika.xml文件即可单节点的形式启动。
查看集群配置情况 select * from system.clusters