ClickHouse学习和集群部署

作者:神秘网友 发布时间:2021-02-23 14:31:20

ClickHouse学习和集群部署

1、ClickHouse产生背景

随着科技的发展,时代的进步,数据分析师已经不再满足于传统的T+1式报表或需要提前设置好维度与指标的OLAP查询。数据分析师更希望使用可以支持任意指标、任意维度并秒级给出反馈的大数据Ad-hoc查询系统。这对大数据技术来说是一项非常大的挑战,传统的大数据查询引擎根本无法做到这一点。由俄罗斯的Yandex公司开源的ClickHouse便诞生了。在第一届OLAP大赛中,在用户行为分析转化漏斗场景里,ClickHouse比Spark快了近10倍。在随后的几年大赛中,面对各种大数据引擎的挑战,ClickHouse一直稳稳地坐在冠军宝座上。同时在各种OLAP查询引擎评测中,ClickHouse单表查询的速度力压现在的各大数据库引擎,尤其是Ad-hoc查询速度一直遥遥领先,因此被国内大量用户和爱好者广泛应用在即席查询场景中。

通俗的解释:数据分析师,他不会在乎,底层有多复杂的数据,多大量的数据,他更在乎的是,自己指定分析维度,并且进行交互式的分析查询(查询延迟是秒级)

ClickHouse的性能测试:https://clickhouse.tech/benchmark/dbms/

1、现有的大数据架构分析报表的缺点

如果我们要做一个基于Hadoop传统的数据分析会是下面的一个架构:程序实时的生成日志发送到kafka,在经过ETL处理之后入库到Hive仓库,数据仓库经过分析之后,将结果导出最后生成报表。

ClickHouse学习和集群部署

上面基于Hadoop 的报表数据分析架构缺点如下:

1、数据时效性:数据经过了Kafka、ELK、调度和各种的处理,所以最终的时效性不是那么的理想,就算这个架构最终优化的很好,那么最终的查询结果也都是秒级

2、即席分析性能:Hive数据存储在HDFS中,HDFS是不支持随机读写的,Hive底层使用的分析引擎,要么是MapReduce要么是Spark,相对来说,他们的执行效率都没有理想中那么好,不适合即席查询

3、涉及组件多:涉及Kafka、Flume、HDFS等等,数据冗余过多,维护起来麻烦

4、数据链路长:数据从源头到最终生成报表,中间经过了非常多的技术组件的处理,要是其中一个技术组件出现问题,那么都会影响我们的可用性。

最终的结果就是,我们基于传统的大数据分析架构进行报表分析,貌似没能达到我们理想中的效果,这个时候我们就期望大数据的性能能够更进一步,或者说有一个系统能够帮我们解决这些问题。

2、新时代的选择

架构目标:

1、海量数据

2、实时导入

3、实时查询

4、多维聚合分析,可以随意做交互式查询

假设我们依旧希望使用Hadoop来解决问题,那么我们希望Hadoop的性能可以翻上几番,但是Hadoop生态体系还是很复杂的,对开发、运维、架构师都有不少的挑战,所以在新时代,新需求冒出来之后,就有很多的公司开发出来了很多的新技术,有kylin, doris, clickhouse, kudu等,这种技术能通过比较低的复杂度来帮助我们高效的解决即席查询的需求。本文将对ClickHouse进行研究学习。

2、OLAP和OLTP技术要点分析

1、OLAP和OLTP介绍

ClickHouse作为OLAP分析引擎,那么OLAP和OLTP也是我们不得不了解的概念。

OLTP:T(transaction)联机事务处理,侧重于增删改

OLAP:A(analysis)联机分析处理,侧重于分析Select非事务大批量数据的聚合查询?

事务处理作用:保证数据的一致性,如果涉及到事务操作,这个操作的执行效率必然不高。

我们设计一款存储系统,没法做到既能满足高效的增删改,又能做高效的查询分析,两者同时满足很困难。基本在业界出现的查询系统,要么是OLAP要么是OLTP,很少且几乎没有同时具备OLAP和OLTP两种特性的高效性。

2、读模式和写模式

写模式:数据存储到系统中的时候,系统会对数据进行校验,如果满足要求数据就能插入进去,如果不满足要求则拒绝写入。

读模式:校验数据模式的时候,在读取数据的时候才进行校验,不是在插入数据的时候进行校验。

OLAP一般都是读模式,OLTP写模式,ClickHouse出来,界限就模糊了。

ClickHouse写模式+OLAP。

3、海量数据高效即席查询需要的条件

海量数据做查询分析高效:列式数据库,写模式(保证同一列的数据类型是一样的,方便压缩),排序

具体优点如下:

1、列式数据库:假设我们一张表有100个字段,我们做查询分析只需要用到其中的几个字段,如果我们是行式数据库,那么我们就需要把这张表的数据都读取出来,我们读取到这行的时候,只需要提取100个字段中的几个字段就能分析。如果是列式数据库,则只需要扫描需要的字段即可完成查询分析。 所以我们在海量数据,想要设计出一块高效的即席查询系统,一定要将底层的数据存储改为列式存储。

2、既然我们将存储改成了列式存储,那么我们就需要对每一列的数据做一个校验,ClickHouse是一个列式数据库,同时他也是一个写模式,就是为了数据写入的时候可以进行校验,写入一列数据,它可以保证一列数据值的类型都是一样的。因为每一个记录这个值的大小都是一样的,所以就类似于我们可以通过连续内存的这个模式来进行存储,对于我们解析和处理来说也会显现的非常高效。

3、同时因为所有字段的值都是一样的,所以我们压缩的时候效果也会特别的高。

4、因为我们这一列的值都是一样的,所以我们做排序的时候也有助于我们进行查询分析。

OLAP体系的重要三个特点:排序+写模式+列式数据库。ClickHouse全部具备

ClickHouse官网解释:https://clickhouse.tech/docs/zh/#olapchang-jing-de-guan-jian-te-zheng

3、ClickHouse介绍

ClickHouse官网:https://clickhouse.tech/

ClickHouse中文社区:http://www.clickhouse.com.cn/

ClickHouse 是俄罗斯搜索巨头 Yandex 公司早 2016年 开源的一个极具 战斗力 的实时数据分析数据 库,是一个用于联机分析 (OLAP:Online Analytical Processing) 的列式数据库管理系统 (DBMS:Database Management System),简称 CK,工作速度比传统方法快100-1000倍,ClickHouse 的性能超过了目前市场上可比的面向列的DBMS。 每秒钟每台服务器每秒处理数亿至十亿多行和数十千 兆字节的数据。它允许在运行时创建表和数据库,加载数据和运行查询,而无需重新配置和重新启动服 务器,支持线性扩展,简单方便,高可靠性,容错。

ClickHouse 作为一个高性能 OLAP 数据库,虽然OLAP能力逆天但也不应该把它用于任何OLTP事务性 操作的场景,相比OLTP:不支持事务、不擅长根据主键按行粒度的查询、不擅长按行删除数据,目前 市场上的其他同类高性能 OLAP 数据库同样也不擅长这些方面。因为对于一款OLAP数据库而言,OLTP 能力并不是重点。

ClickHouse从OLAP场景需求出发,定制开发了一套全新的高效列式存储引擎,并且实现了数据有序存 储、主键索引、稀疏索引、数据Sharding、数据Partitioning、TTL、主备复制等丰富功能。这些功能共 同为ClickHouse极速的分析性能奠定了基础。

ClickHouse适合流式或批次入库的时序数据。ClickHouse不应该被用作通用数据库,而是作为超高性能 的海量数据快速查询的分布式实时处理平台,在数据汇总查询方面(如GROUP BY),ClickHouse的查询 速度非常快。

典型特点总结:ROLAP、在线实时查询、完整的DBMS、列式存储、不需要任何数据预处理、支持批量 更新、具有非常完善的SQL支持和函数、支持高可用、不依赖Hadoop复杂生态、开箱即用

简单的说,ClickHouse作为分析型数据库,有三大特点:一是跑分快, 二是功能多 ,三是文艺范 1. 跑分快: ClickHouse跑分是Vertica的5倍快:

(1)、跑分快:ClickHouse跑分是Vertica的五倍快

clickHouse性能超过了市面上大部分的列式存储数据库,相比传统的数据ClickHouse要快100-1000X, ClickHouse还是有非常大的优势:

100Million 数据集:ClickHouse比Vertica约快5倍,比Hive快279倍,比MySQL快801倍

1Billion 数据集:ClickHouse比Vertica约快5倍,MySQL和Hive已经无法完成任务了

(2)、功能多:ClickHouse支持数据统计分析各种场景

支持类SQL查询, 支持繁多库函数(例如IP转化,URL分析等,预估计算/HyperLoglog等) 支持数组(Array)和嵌套数据结构(Nested Data Structure) 支持数据库异地复制部署+支持分布式

(3)、文艺范:目前ClickHouse的限制很多,生来就是为小资服务的

相对较缺乏的文档,社区刚开始活跃,只有开源的C++源码

不理睬Hadoop生态,走自己的路

1、ClickHouse适用场景

适合:用于结构良好清晰且不可变的事件或日志流实时查询分析。

不适合:事务性工作(OLTP),高请求率的键值访问,低延迟的修改或删除已存在数据,Blob或文档存储,超 标准化数据。

2、ClickHouse优点

与 Hadoop、Spark 这些巨无霸组件相比,ClickHouse 具有轻量级的优点,它的特点包括以下内容:

(1)真正的面向列的 DBMS

ClickHouse 是一个 DBMS,而不是一个单一的数据库。它允许在运行时创建表和数据库、加载数据和运行 查询,而无需重新配置和重新启动服务器。

(2)数据压缩

一些面向列的 DBMS(InfiniDB CE 和 MonetDB)不使用数据压缩。但是,数据压缩确实提高了性能。

(3)磁盘存储的数据

许多面向列的 DBMS(SAP HANA 和 GooglePowerDrill)只能在内存中工作。但即使在数千台服务器 上,内存也太小,无法在 Yandex.Metrica 中存储所有浏览量和会话。

(4)多核并行处理 多核多节点并行化大型查询。

(5)在多个服务器上分布式处理

在 ClickHouse 中,数据可以驻留在不同的分片上。每个分片都可以用于容错的一组副本,查询会在所有分 片上并行处理。

(6)SQL支持

ClickHouse SQL 跟真正的 SQL 有不一样的函数名称。不过语法基本跟 SQL 语法兼容,支持 JOIN、 FROM、IN 和 JOIN 子句以及标量子查询支持子查询。

(7)向量化引擎

数据不仅按列存储,而且由矢量 列的部分进行处理,这使开发者能够实现高 CPU 性能。

(8)实时数据更新

ClickHouse 支持主键表。为了快速执行对主键范围的查询,数据使用合并树 (MergeTree) 进行递增排 序。由于这个原因,数据可以不断地添加到表中。

(9)支持近似计算(很多组件不具备的)统计全中国到底有多少人1434567654 14.3E PV 近似计算 UV 具体的值 该库支持为有限数量的随机密钥(而不是所有密钥)运行聚合。在数据中密钥分发的特定条件下,这提供了相 对准确的结果,同时使用较少的资源。

(10)数据复制和对数据完整性的支持。

ClickHouse 使用异步多主复制。写入任何可用的副本后,数据将分发到所有剩余的副本。系统在不同的副 本上保持相同的数据。数据在失败后自动恢复。 扩展成为分布式的数据库OLAP引擎,严重依赖于zookeeper 的

3、ClickHouse缺点

ClickHouse 作为一个被设计用来在实时分析的 OLAP 组件,只是在高效率的分析方面性能发挥到极 致,那必然就会在其他方面做出取舍:

(1)没有完整的事务支持,不支持Transaction:想快就别想Transaction

(2)缺少完整的Update/Delete操作,缺少高频率、低延迟的修改或删除已存在数据的能力,仅能用于批量删除或修改数据。

(3)聚合结果必须小于一台机器的内存大小:不是大问题

(4)支持有限操作系统,正在慢慢完善

(5)开源社区刚刚启动,主要是俄语为主,中文社区:http://www.clickhouse.com.cn

(6)不适合key-value存储,不支持 Blob 等文档型数据库

4、ClickHouse安装部署

操作系统:Centos 7.6

ClickHouse:20.x

1、安装前的准备

(1)修改打开文件数限制,重启服务器生效,ulimit -n或 -a检查生效情况

[root@ck-01 ~]# cat /etc/security/limits.conf * soft nofile 65535* hard nofile 65535* soft fsize  6553500* hard fsize  6553500

(2)关闭Selinux和Iptables

(3)安装依赖

yum install -y libtoolyum install -y *unixODBC*

(4)需要验证当前服务器的 CPU 是否支持 SSE 4.2 指令集,因为向量化执行需要用到这项特性:

[root@ck-01 ~]# grep -q sse4_2 /proc/cpuinfo  echo SSE 4.2 supported || echo SSE 4.2 not supportedSSE 4.2 supported

2、单机安装ClickHouse

执行如下命令进行安装

[root@ck-01 ~]# yum install yum-utils -y[root@ck-01 ~]# rpm --import https://repo.clickhouse.tech/CLICKHOUSE-KEY.GPG[root@ck-01 ~]# yum-config-manager --add-repo https://repo.clickhouse.tech/rpm/clickhouse.repo[root@ck-01 ~]# yum install clickhouse-server clickhouse-client -y

修改安装目录权限为root,不然root启动会报错

[root@ck-01 ~]# cd /var/lib/[root@ck-01 ~]# chown -R root:root clickhouse

后台启动ClickHouse

[root@ck-01 lib]# nohup clickhouse-server --config-file=/etc/clickhouse-server/config.xml 1~/logs/clickhouse_std.log 2~/logs/clickhouse_err.log 

检查启动

[root@ck-01 lib]# ps aux | grep clickhouseroot      13307  0.0  0.9 464928 34884 pts/1    S    19:22   0:00 clickhouse-watchd --config-file=/etc/clickhouse-server/config.xmlroot      13308  1.9  7.1 1248464 273696 pts/1  SLl  19:22   0:00 clickhouse-server --config-file=/etc/clickhouse-server/config.xmlroot      13355  0.0  0.0 112824   980 pts/1    S+   19:22   0:00 grep --color=auto clickhouse[root@ck-01 lib]# netstat -lntp | grep clickhousetcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      13308/clickhouse-se tcp        0      0 127.0.0.1:9004          0.0.0.0:*               LISTEN      13308/clickhouse-se tcp        0      0 127.0.0.1:9009          0.0.0.0:*               LISTEN      13308/clickhouse-se tcp        0      0 127.0.0.1:8123          0.0.0.0:*               LISTEN      13308/clickhouse-se tcp6       0      0 ::1:9000                :::*                    LISTEN      13308/clickhouse-se tcp6       0      0 ::1:9004                :::*                    LISTEN      13308/clickhouse-se tcp6       0      0 ::1:9009                :::*                    LISTEN      13308/clickhouse-se tcp6       0      0 ::1:8123                :::*                    LISTEN      13308/clickhouse-se

其他安装方式参考官方:https://clickhouse.tech/#quick-start

ClickHouse核心目录:

(1)/etc/clickhouse-server:服务端的配置文件目录,包括全局配置config.xml和用户配置users.xml等。

(2)/var/lib/clickhouse:默认数据存储目录,通常会修改默认路径配置,将数据保存到大容量磁盘挂 载路径

(3)/var/log/clickhouse-server:默认日志保存目录,通常会修改路径配置将日志保存到大容量磁盘 挂载的路径

ClickHouse可执行文件:

(1)clickhouse:主程序的可执行文件。

(2)clickhouse-client:一个指向ClickHouse可执行文件的软链接,供客户端连接使用。

(3)clickhouse-server:一个指向ClickHouse可执行文件的软链接,供服务端启动使用。

(4)clickhouse-compressor:内置提供的压缩工具,可用于数据的正压反解。

3、配置ClickHouse集群

环境介绍:

主机名IP地址操作系统
ck-0110.1.14.91centos 7.6
ck-0210.1.14.92centos 7.6
ck-0310.1.14.93centos 7.6
ck-0410.1.14.94centos 7.6

前置准备工作:

1、在四台机器中按照单机部署的方式,分别准备ClickHouse环境

2、部署一套zookeeper集群

(1)所有节点修改config.xml文件

[root@ck-01 ~]# vim /etc/clickhouse-server/config.xml listen_host::/listen_host

listen_host 表示能监听的主机,:: 表示任意主机都可以访问

(2)在四台机器的etc目录下新建metrika.xml文件

[root@ck-01 ~]# cat /etc/metrika.xml yandex     clickhouse_remote_servers        !-- 4分片1副本 --	fb_clickhouse_4shards_1replicas	    shard              !-- 数据自动同步 -- 	      internal_replicationtrue/internal_replication	      replica	         hostck-01/host	         port9000/port	      /replica       	    /shard            shard              internal_replicationtrue/internal_replication              replica                 hostck-02/host                 port9000/port              /replica            /shard            shard              internal_replicationtrue/internal_replication              replica                 hostck-03/host                 port9000/port              /replica            /shard            shard              internal_replicationtrue/internal_replication              replica                 hostck-04/host                 port9000/port              /replica            /shard        /fb_clickhouse_4shards_1replicas     /clickhouse_remote_servers     !-- zookeeper 自动同步 --      zookeeper-servers        node index=1            hostck-01/host            port2181/port        /node        node index=2            hostck-02/host            port2181/port        /node        node index=1            hostck-03/host            port2181/port        /node    /zookeeper-servers     !-- 配置文件中macros若省略,则建复制表时每个分片需指定zookeeper路径及副本名称,同一分片 上路径相同,副本名称不同;若不省略需每个分片不同配置 --    macros        replicack-01/replica    /macros    networks        ip::/0/ip    /networks    !-- 配置压缩 --     clickhouse_compression        case            min_part_size10000000000/min_part_size            min_part_size_ratio0.01/min_part_size_ratio            methodlz4/method        /case    /clickhouse_compression/yandex

配置完成之后重启四个节点,集群配置就完成了

4、设置用户名和密码

系统默认使用 default 用户登录 无密码。 现在我们配置用户 bigdata 密码为 bigdata 配置一个用户:你配置的 bigdata 就是用户名, password 这个标签中的值,就是密码

[root@ck-01 ~]# vim /etc/clickhouse-server/users.xml         bigdata                passwordbigdata/password                networks incl=networks replace=replace                        ip::/0/ip                /networks                profiledefault/profile                quotadefault/quota        /bigdata

修改完成之后,这个配置文件要同步到其他节点中

5、客户端连接集群

启动客户端连接集群的命令

[root@ck-01 ~]# clickhouse-client --host=ck-01 --port=9000 --user=bigdata --password=bigdata -m

ClickHouse客户端参数介绍

参数描述
host, -h目标服务器名,默认为 localhost
port目标端口,默认为 9000
user, -u连接用户,默认为 default
password连接用户密码,默认为空字符串
query, -q非交互模式下执行的命令
database, -d当前操作的数据库,默认选择配置文件配置的值(默认为 default 库)
multiline, -m如果设定,允许多行查询
multiquery, -n如果指定,允许处理由分号分隔的多个查询。只有在非交互式模式工作。
format, -f使用指定的默认格式输出结果
vertical, -E如果指定,默认使用垂直格式输出结果,等同于 format=Vertical。 在这种格式中,每个值可在单独的行上,显示宽表时很有用。
time, -t如果指定,在 stderr 中输出查询执行时间的非交互式模式下。
stacktrace如果指定,如果发生异常,也会输出堆栈跟踪。
config-file配置文件的名称,额外的设置或改变了上面列出的设置默认值。

6、ClickHouse集群注意事项

ClickHouse每个节点在安装的时候,都是独立的。就算是配置成集群了,每个服务器依然还是单独运行的。如果你创建了一张表,这张表的引擎是分布式的引擎,那么这个表所存储在那个集群里面的机器,就是一个集群了。

ClickHouse学习和集群部署 相关文章

  1. linux系统符号及正则符号学习

    参考:https://www.zsythink.net/archives/1845 一、linux系统特殊符号: 引号: ' ' 输出的信息,所见及所得。 '' '' 解析文本中的特定字符,并输出解析后的内容 ` ` $() 将引号中的命令先执行,将执行的结果交给外面的命令进行处理,和双引号功能类似,但

  2. MySQL学习笔记(五)

    倒数第二天!冲冲冲!!! 一、索引 一个表里面可以有多个索引。 1. 索引的作用:约束与加速查找 无索引:从前到后依次查找 有索引:会为索引列创造一个额外文件(以某种格式存储)。在使用索引进行查找时,会优先在该文件里面进行查找,所以查询时很快。—

  3. Asp.Net Core学习笔记:(二)视图、模型、持久化、文件、错误处理、日志

    TagHelper 入门 优点:根据参数自动生成,不需要手写超链接,类似Django模板里面的url命令。 在ViewImport中添加TagHelper @addTagHelper *,Microsoft.AspNetCore.Mvc.TagHelpers 比如,链接TagHelper使用 a class="btn btn-outline-primary" asp-controller

  4. Nodejs 学习笔记和实例【 一篇全覆盖:写后端 api 接口完全够了】

    本文pdf下载 Nodejs学习笔记 Node.js官方API文档 一、基础知识 1. 命令行窗口 dir命令:列出当前目录下所有的文件夹名字; md命令:创建一个文件夹; rd命令:删除一个文件夹; path环境变量的作用:当我们在命令行窗口中使用命令打开一个文件或者调用一个程

  5. 在 TKE 中使用 Velero 迁移复制集群资源

    概述 Velero(以前称为Heptio Ark)是一个开源工具,可以安全地备份和还原,执行灾难恢复以及迁移 Kubernetes 群集资源和持久卷,可以在 TKE 集群或自建 Kubernetes 集群中部署 Velero 用于: 备份集群并在丢失的情况下进行还原。 将集群资源迁移到其他集群

  6. Redis学习笔记(一)安装

    一、Redis简介 Redis是完全开源的,遵守BSD协议,是一个高性能的key-value数据库。 Redis 与其他 key - value 缓存产品有以下三个特点: 1)Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 2)Redis不仅仅支持简

  7. C++Primer plus学习记录第一日.1

    最近在深入一些炫目的源码,发现了大量的CPP的身影,各种C函数穿插其中,我发现我的CPP的学习之路必须开始了。从C转过来的我感觉到这个写法还是比较亲切的。但是特性也好多,我选择C++Primer plus这本经典的书籍进行入门的学习~ 编译的环境选择微软的Visual

  8. [学习笔记] SAM——后缀自动机

    [学习笔记] SAM——后缀自动机 零.前言 ? 真是给我整的有够难受的,这个SAM,也不算搞懂了。只是粗浅的理解了一下,且在这里试图将它写下来。 ?上面是这个笔记的初稿,现在做了一些题,感觉自己不说懂完了,但是还是有一点点点点东西的。/cy 一.概念 1.自动

  9. LeetCode 41. 缺失的第一个正数

    新手学习中,有任何错误或者更好地方法、思路欢迎指教! #Array 6 题目难度: 困难 题目描述: 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。进阶:你可以实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案吗示例 1:输

  10. 基于android的app开发!Android之内存泄漏调试学习与总结,深度好文

    一,鸿蒙核心内容掌握程度 看看下面这些鸿蒙知识点你掌握了多少: 基础环境和开发工具 开发工具安装 运行开发工具完成基础配置DevEco Studio 运行第一个hello world 运行第一个页面 通过代码创建页面 Feature Ability 编程实现页面跳转 市面上的鸿蒙教程大多

每天更新java,php,javaScript,go,python,nodejs,vue,android,mysql等相关技术教程,教程由网友分享而来,欢迎大家分享IT技术教程到本站,帮助自己同时也帮助他人!

Copyright 2020, All Rights Reserved. Powered by 跳墙网(www.tqwba.com)|网站地图|关键词