ClickHouse数据库安装

标签: Clickhouse 分类: 数据库 创建时间:2019-12-18 07:53:03 更新时间:2024-11-15 10:49:43

ClickHouse数据库,是俄罗斯Yandex公司于2019年6月开源的一款MMP列式存储数据库。ClickHouse is an open source column-oriented database management system capable of real time generation of analytical data reports using SQL queries.
优点:

(1) 真正的列式数据库管理系统
(2) 数据压缩
(3) 数据的磁盘存储
(4) 多核心并行处理
(5) 多服务器分布式处理
(6) 支持SQL
(7) 向量引擎
(8) 实时的数据更新
(9) 索引
(10) 适合在线查询
(11) 支持近似计算
(12) 支持数据复制和数据完整性

缺点:

(1) 没有完整的事务支持
(2) 缺少高频率,低延迟的修改或删除已存在数据的能力。仅能用于批量删除或修改数据,但这符合 GDPR
(3) 稀疏索引使得ClickHouse不适合通过其键检索单行的点查询

ClickHouse内部自己测试了和Vertica数据库(惠普公司的商用数据库),测试了项很多,数据指标也很多,我看不懂,但是总结起来就一句话,ClickHouse比Vertica牛逼多了。关键的关键,ClickHouse开源免费啊,这对于创业公司,简直是莫大的优势啊。想想Vertica动辄上万的商业费用,小公司一年的利润也可能没有这么多。

参考文章:
1.每天十亿级数据更新,秒出查询结果,ClickHouse在携程酒店的应用 (文章讲述了携程大数据解决方案,很有帮助)
2.DorisDB、TiDB/TiFlash、ClickHouse性能对比-单多表场景 (DorisDB总体时间最短,这个我没有尝试过)

1.安装虚拟机

我下载了Centos8,在XenServer上安装了虚拟机,然后编辑/etc/sysconfig/network-scripts/ifcfg-eth0文件中的内容,配置为静态ip(Linux运维之网络)。

2.其他工具安装(可以选择安装)

(1) 因为新建的虚拟机,什么东西都没有,所以可以安装一个复制工具

1
yum install lrzsz

(2) 使用ftp命令进行局域网数据传递
使用rz和sz命令上传和下载命令特别的慢,有时候还卡,所以可以选择使用ftp的方式,因为安装了IIS服务器之后,就自带了ftp功能,可以新建一个ftp站点,然后选择匿名用户等,在linux服务器上使用wget命令进行下载数据。

1
2
3
4
## 安装wget
yum install wget
## 下载全部文件
wget ftp://IP:PORT/* --ftp-user=xxx --ftp-password=xxx -r

3.安装ClickHouse

安装这个真是惊艳到我了,我大致翻了一下Vertica数据库的安装步骤,没有个十几二十几步,根本下不下来,而且前同事,刚上手Vertica的时候,也是费了九牛二虎之力才搞完的(据说三天)。相比之下,ClickHouse就简单的多了,可以单台部署,也可以集群部署,而且命令行就那么几句。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
## 查看系统是否支持
grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"

## Debian/Ubuntu

## 在/etc/apt/sources.list (或创建/etc/apt/sources.list.d/clickhouse.list文件)中添加仓库:
deb http://repo.yandex.ru/clickhouse/deb/stable/ main/

## 执行命令安装
sudo apt-get install dirmngr # optional
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv E0C56BD4 # optional
sudo apt-get update
sudo apt-get install clickhouse-client clickhouse-server

## CentOS,RedHat和所有其他基于rpm的Linux发行版
## 添加官方库
sudo yum install yum-utils
sudo rpm --import https://repo.yandex.ru/clickhouse/CLICKHOUSE-KEY.GPG
sudo yum-config-manager --add-repo https://repo.yandex.ru/clickhouse/rpm/stable/x86_64

## 安装
sudo yum install clickhouse-server clickhouse-client

下载CentOS7时,会出现一个下载连接,这里有ppc64和aarch64,我顺手就查了一下。AArch64是ARMv8 架构的一种执行状态。ppc:IBM® POWER Architecture 体系是RISC指令集的CPU。ClickHouse可以在任何具有x86_64,AArch64或PowerPC64LE CPU架构的Linux,FreeBSD或Mac OS X上运行。

使用yum安装时,出现了总是下载不了

我只能从windows下翻墙下载了clickhouse-common-static-19.17.5.18-2.x86_64rpm安装包,然后使用rz命令上传到虚拟机中然后执行安装

1
2
3
4
5
6
7
8
9
10
## rpm安装
rpm -ivh clickhouse-common-static-19.17.5.18-2.x86_64.rpm
## 再次执行
sudo yum install clickhouse-server clickhouse-client

## dpkg安装
sudo dpkg -i clickhouse-common-static_20.1.3.7_amd64.deb
sudo dpkg -i clickhouse-client_20.1.3.7_all.deb clickhouse-server_20.1.3.7_all.deb


结果安装成功了:

4.启动服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
## 启动服务端
sudo service clickhouse-server start

## 重启停止和查看启动状态,centos6.5
service clickhouse-server stop
service clickhouse-server restart
service clickhouse-server status

## 重启停止和查看启动状态,centos7+
systemctl stop clickhouse-server
systemctl restart clickhouse-server
systemctl status clickhouse-server

## 启动客户端
clickhouse-client

## 带密码启动
clickhouse-client --password 密码

## 验证连接是否成功
localhost :) select 1

成功了:

问题

(1) Init script is already running
在启动的时候出现了这个提示,使用客户端连接的时候,也连接不上。

解决方法修改/etc/clickhouse-server/config.xml文件,然后重启服务:systemctl restart clickhouse-server

1
2
3
4
5
<!--将下面的东西-->
<listen_host>::1</listen_host>

<!--改为-->
<listen_host>::</listen_host>

5.基本操作

我先测试了单机安装时的相关操作,命令都是在root用户下操作的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
## 查询表的行数
SELECT count() FROM realtime;

## 连接服务器
clickhouse-client
## 创建数据库
CREATE DATABASE IF NOT EXISTS 数据库名
## 删除数据库
DROP DATABASE 数据库名

## 创建表
CREATE TABLE if not exists [数据库名.]表名 (
id UInt32,
SiteNo Nullable(Int16),
...
) ENGINE = MergeTree() PARTITION BY toYYYYMM(RecordTime) ORDER BY (id)

## 删除表和删除数据库是一样一样的
DROP TABLE 表名

MergeTree,是表引擎。MergeTree引擎系列的基本理念如下。当你有巨量数据要插入到表中,你要高效地一批批写入数据片段,并希望这些数据片段在后台按照一定规则合并。相比在插入时不断修改(重写)数据进存储,这种策略会高效很多。

参考文章:
1.MergeTree

6.导入csv数据

将其他数据库中数据比如使用navicate将sqlserver数据表导出成csv文件,上传到服务器。

1
2
## 批量插入csv数据
cat [csv文件名] | clickhouse-client --query="INSERT INTO [数据库名].[表名] FORMAT CSV";

问题:
(1) Code: 32. DB::Exception: Attempt to read after eof
查看clickhouse错误日志:/var/log/clickhouse-server/clickhouse-server.err.log
这个问题,其实是因为我在从windows上上传到linux服务器上的时候,使用ftp中断了,我没有发现,其实数据传输的不全,所以就会造成了文件意外的结束。

7.可视化界面

Tabix、HouseOps、灯塔、DBeaver等工具

小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。