联机分析列式数据库管理系统ClickHouse
一、什么是ClickHouse
ClickHouse是一个开源的,用于联机分析(OLAP)的列式数据库管理系统(DBMS-database manager system), 它是面向列的,并允许使用SQL查询,实时生成分析报告。ClickHouse最初是一款名为Yandex.Metrica的产品,主要用于WEB流量分析。ClickHouse的全称是Click Stream,Data WareHouse,简称ClickHouse。
OLAP场景的特征
-
绝大多数是读请求。
-
数据以相当大的批次(> 1000行)更新,而不是单行更新;或者根本没有更新。
-
已添加到数据库的数据不能修改。
-
对于读取,从数据库中提取相当多的行,但只提取列的一小部分。
-
宽表,即每个表包含着大量的列。
-
查询相对较少(通常每台服务器每秒查询数百次或更少)。
-
处理单个查询时需要高吞吐量(每台服务器每秒可达数十亿行)。
-
事务不是必须的。
-
对数据一致性要求低。有副本情况下,写入一个即可,后台自动同步。
-
每个查询有一个大表。除了他以外,其他的都很小。
-
查询结果明显小于源数据。换句话说,数据经过过滤或聚合,因此结果适合于单个服务器的RAM中。
ClickHouse特性
1)、完备的DBMS功能
-
DDL(Data Definition Language-数据定义语言):可以动态地创建、修改或删除数据库、表和视图,而无须重启服务。
-
DML(Data Manipulation Language):可以动态查询、插入、修改或删除数据。
-
分布式管理:提供集群模式,能够自动管理多个数据库节点。
-
权限控制:可以按照用户粒度设置数据库或者表的操作权限,保障数据的安全性。
-
数据备份与恢复:提供了数据备份导出与导入恢复机制,满足生产环境的要求。
2)、列式存储
-
行式存储在数据写入和修改上具有优势。
行存储的写入是一次完成的,如果这种写入建立在操作系统的文件系统上,可以保证写入过程的成功或者失败,可以保证数据的完整性。列式存储需要把一行记录拆分成单列保存,写入次数明显比行存储多(因为磁头调度次数多,而磁头调度是需要时间的,一般在1ms~10ms),再加上磁头需要在盘片上移动和定位花费的时间,实际消耗更大。
数据修改实际上也是一次写入过程,不同的是,数据修改是对磁盘上的记录做删除标记。行存储是在指定位置写入一次,列存储是将磁盘定位到多个列上分别写入,这个过程仍是行存储的列数倍。
所以,行式存储在数据写入和修改上具有很大优势。
-
列式存储在数据读取和解析、分析数据上具有优势。
数据读取时,行存储通常将一行数据完全读出,如果只需要其中几列数据的情况,就会存在冗余列,出于缩短处理时间的考量,消除冗余列的过程通常是在内存中进行的。列存储每次读取的数据是集合的一段或者全部,不存在冗余性问题。
列式存储中的每一列数据类型是相同的,不存在二义性问题,例如,某列类型为整型int,那么它的数据集合一定是整型数据,这种情况使数据解析变得十分容易。相比之下,行存储则要复杂得多,因为在一行记录中保存了多种类型的数据,数据解析需要在多种数据类型之间频繁转换,这个操作很消耗CPU,增加了解析的时间。
所以,列式存储在数据读取和解析数据做数据分析上更具优势。
综上所述,行存储的写入是一次性完成,消耗的时间比列存储少,并且能够保证数据的完整性,缺点是数据读取过程中会产生冗余数据,如果只有少量数据,此影响可以忽略,数量大可能会影响到数据的处理效率。列存储在写入效率、保证数据完整性上都不如行存储,它的优势是在读取过程,不会产生冗余数据,这对数据完整性要求不高的大数据处理领域比较重要。一般来说一个OLAP类型的查询可能需要访问几百万或者几十亿行的数据,但是OLAP分析时只是获取少数的列,对于这种场景列式数据库只需要读取对应的列即可,行式数据库需要读取所有的数据列,因此这种场景更适合列式数据库,可以大大提高OLAP数据分析的效率。ClickHouse就是一款使用列式存储的数据库,数据按列进行组织,属于同一列的数据会被保存在一起,列与列之间也会由不同的文件分别保存,在对OLAP场景分析时,效率很高。
二、ClickHouse安装
sudo yum install yum-utils
sudo rpm --import https://repo.clickhouse.com/CLICKHOUSE-KEY.GPG
sudo yum-config-manager --add-repo https://repo.clickhouse.com/rpm/stable/x86_64
sudo yum install clickhouse-server clickhouse-client -y
修改配置文件/etc/clickhouse-server/
config.xml 去掉下面代码注释 <listen_host>0.0.0.0</listen_host>
users.xml 增加密码<password>123456</password>
[root@hadoop10 clickhouse-server]# systemctl start clickhouse-server
[root@hadoop10 clickhouse-server]# systemctl status clickhouse-server
[root@hadoop10 clickhouse-server]# clickhouse-client -h hadoop10 --port 9000 --password 123456
ClickHouse client version 22.2.2.1.
Connecting to hadoop10:9000 as user default.
Connected to ClickHouse server version 22.2.2 revision 54455.
hadoop10 :)
netstat -nltp 查看ck启动的端口
安装完成之后会生成如下对应的目录,每个目录的介绍如下:
-
/etc/clickhouse-server : 服务端的配置文件目录,包括全局配置config.xml和用户配置users.xml。
-
/var/lib/clickhouse : 默认的数据存储目录,通常会修改,将数据保存到大容量磁盘路径中。
-
/var/log/cilckhouse-server : 默认保存日志的目录,通常会修改,将数据保存到大容量磁盘路径中。
-
在/usr/bin下会有可执行文件:
clickhouse:主程序可执行文件
clickhouse-server:一个指向clickhouse可执行文件的软连接,供服务端启动使用。
clickhouse-client:一个指向clickhouse可执行文件的软连接,供客户端启动使用。
三、客户端命令行参数
我们可以通过clickhouse client来连接启动的clickhouse服务,连接服务时,我们可以指定以下参数,这里指定的参数会覆盖默认值和配置文件中的配置。
参数 | 解释 |
---|---|
--host, -h | 服务端的host名称, 默认是localhost。您可以选择使用host名称或者IPv4或IPv6地址。 |
--port | 连接的端口,默认值:9000。注意HTTP接口以及TCP原生接口使用的是不同端口。 |
--user, -u | 用户名。 默认值:default。 |
--password | 密码。 默认值:空字符串。 |
--query,-q | 使用非交互模式查询。 |
--database, -d | 默认当前操作的数据库. 默认值:服务端默认的配置(默认是default)。 |
--multiline, -m | 如果指定,允许多行语句查询(Enter仅代表换行,不代表查询语句完结)。 |
#hive -e "sql"
clickhouse-client -q "show databases" -h hadoop10 --password 123456
clickhouse-client -d "system" -q "show tables"
clickhouse-client -h hadoop10 --port 9000 --password 123456 -m
四、安装的图形化操作图示
五、总结
clickhouse-client
连接,支持指定主机、端口、用户等参数,非交互模式可直接执行查询,满足多样使用场景 。- 点赞
- 收藏
- 关注作者
评论(0)