ClickHouse 特点
学习地址:https://clickhouse.tech/docs/zh/ ,以下笔记部分来源官网,部分来源B站视频:https://www.bilibili.com/video/BV1Yh411z7os?p=1
ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。
OLAP场景的关键特征
- 绝大多数是读请求
- 数据以相当大的批次(> 1000行)更新,而不是单行更新;或者根本没有更新。
- 已添加到数据库的数据不能修改。
- 对于读取,从数据库中提取相当多的行,但只提取列的一小部分。
- 宽表,即每个表包含着大量的列
- 查询相对较少(通常每台服务器每秒查询数百次或更少)
- 对于简单查询,允许延迟大约50毫秒
- 列中的数据相对较小:数字和短字符串(例如,每个URL 60个字节)
- 处理单个查询时需要高吞吐量(每台服务器每秒可达数十亿行)
- 事务不是必须的
- 对数据一致性要求低
- 每个查询有一个大表。除了他以外,其他的都很小。
- 查询结果明显小于源数据。换句话说,数据经过过滤或聚合,因此结果适合于单个服务器的RAM中
ClickHouse的特性
-
列式存储
-
DBMS的功能,支持sql
几乎覆盖了标准 SQL 的大部分语法,包括 DDL 和 DML,以及配套的各种函数,用户管理及权限管理,数据的备份与恢复。
- 多样化引擎
ClickHouse 和 MySQL 类似,把表级的存储引擎插件化,根据表的不同需求可以设定不同的存储引擎。目前包括合并树、日志、接口和其他四大类 20 多种引擎。
- 高吞吐写入能力
ClickHouse 采用类 LSM Tree的结构,数据写入后定期在后台 Compaction。通过类 LSM tree的结构,ClickHouse 在数据导入时全部是顺序 append 写,写入后数据段不可更改,在后台compaction 时也是多个段 merge sort 后顺序写回磁盘。顺序写的特性,充分利用了磁盘的吞吐能力,即便在 HDD 上也有着优异的写入性能。官方公开 benchmark 测试显示能够达到 50MB-200MB/s 的写入吞吐能力,按照每行100Byte 估算,大约相当于 50W-200W 条/s 的写入速度。
- 数据分区与线程级并行
ClickHouse 将数据划分为多个 partition,每个 partition 再进一步划分为多个 index granularity(索引粒度),然后通过多个 CPU核心分别处理其中的一部分来实现并行数据处理。在这种设计下,单条 Query 就能利用整机所有 CPU。极致的并行处理能力,极大的降低了查询延时。所以,ClickHouse 即使对于大量数据的查询也能够化整为零平行处理。但是有一个弊端就是对于单条查询使用多 cpu,就不利于同时并发多条查询。所以对于高 qps 的查询业务,ClickHouse 并不是强项。
ClickHouse安装部署过程
准备工作
-
确定防火墙处于关闭状态
-
CentOS取消打开文件数限制
-
在 hadoop102 的 /etc/security/limits.conf 文件的末尾加入以下内容
[hadoop@hadoop102 ~]$ sudo vi /etc/security/limits.conf #<domain> <type> <item> <value> * soft nofile 65536 * hard nofile 65536 * soft nproc 131072 * hard nproc 131072
配置说明:由于clickhouse的 特性 ,需要配置最大读取文件数和最大进程数,soft 和 hard 标识配置当前用户 和 全局用户。soft 要小于等于 hard
-
在 hadoop102 的/etc/security/limits.d/20-nproc.conf 文件的末尾加入以下内容
[hadoop@hadoop102 ~]$ sudo vi /etc/security/limits.d/20-nproc.conf * soft nproc 4096 root soft nproc unlimited * soft nofile 65536 * hard nofile 65536 * soft nproc 131072 * hard nproc 131072
生效方式:
重新登录用户即可
-
执行同步操作
##因为是系统文件,需要用sudo 的方式,不然会报权限不足 [hadoop@hadoop102 ~]$ sudo /home/hadoop/bin/xsync /etc/security/limits.conf [hadoop@hadoop102 ~]$ sudo /home/hadoop/bin/xsync /etc/security/limits.d/20-nproc.conf ##查看文件进程限制命令,可对比查看是否配置成功 [hadoop@hadoop102 ~]$ ulimit -a
-
-
安装clickhouse依赖(在 hadoop103、hadoop104 上也要执行以下操作)
[hadoop@hadoop102 ~]$ sudo yum install -y libtool [hadoop@hadoop102 ~]$ sudo yum install -y *unixODBC*
-
CentOS 取消 SELINUX (安全增强)
##查看安全增强协议,Enforcing:开启,Disabled :关闭 [hadoop@hadoop102 root]$ getenforce Enforcing ##修改/etc/selinux/config 中的 SELINUX=disabled [hadoop@hadoop102 root]$ sudo vi /etc/selinux/config SELINUX=disabled ##执行同步操作 [hadoop@hadoop102 root]$ sudo /home/hadoop/bin/xsync /etc/selinux/config ##重启三台服务器 生效
单机安装
clickhouse安装文件下载地址:https://repo.yandex.ru/clickhouse/rpm/stable/x86_64/
使用版本号:21.7.3.14-2
-
将安装文件上传到hadoop102,并分发到hadoop104,hadoop103
[hadoop@hadoop102 software]$ mkdir clickhouse ##上传文件 [hadoop@hadoop102 software]$ rz [hadoop@hadoop102 clickhouse]$ ls clickhouse-client-21.7.3.14-2.noarch.rpm clickhouse-common-static-21.7.3.14-2.x86_64.rpm clickhouse-common-static-dbg-21.7.3.14-2.x86_64.rpm clickhouse-server-21.7.3.14-2.noarch.rpm ## 分发文件 [hadoop@hadoop102 software]$ xsync clickhouse
-
分别在三台机子上安装这 4 个 rpm 文件(中途提示设置密码,可不设置,回车)
[hadoop@hadoop102 clickhouse]$ sudo rpm -ivh *.rpm ## sudo rpm -qa|grep clickhouse 查看安装情况 [hadoop@hadoop102 clickhouse]$ sudo rpm -qa|grep clickhouse clickhouse-common-static-21.7.3.14-2.x86_64 clickhouse-client-21.7.3.14-2.noarch clickhouse-common-static-dbg-21.7.3.14-2.x86_64 clickhouse-server-21.7.3.14-2.noarch
-
修改配置文件(使用root用户修改,否则可能出现权限不够)
[hadoop@hadoop102 etc]$ su root ## 把 <listen_host>::</listen_host> 的注释打开,这样的话才能让 ClickHouse 被除本 机以外的服务器访问 [root@hadoop102 clickhouse-server]# vi /etc/clickhouse-server/config.xml ##分发配置文件 [root@hadoop102 clickhouse-server]# sudo /home/hadoop/bin/xsync /etc/clickhouse-server/config.xml
-
三台机器上关闭开机自启
[hadoop@hadoop102 bin]$ sudo systemctl disable clickhouse-server Removed symlink /etc/systemd/system/multi-user.target.wants/clickhouse-server.service.
-
启动Server
[hadoop@hadoop102 bin]$ cd /usr/bin/ [hadoop@hadoop102 bin]$ sudo clickhouse start chown --recursive clickhouse '/var/run/clickhouse-server/' Will run su -s /bin/sh 'clickhouse' -c '/usr/bin/clickhouse-server --config-file /etc/clickhouse-server/config.xml --pid-file /var/run/clickhouse-server/clickhouse-server.pid --daemon' Waiting for server to start Waiting for server to start Server started [hadoop@hadoop102 bin]$ sudo clickhouse status /var/run/clickhouse-server/clickhouse-server.pid file exists and contains pid = 2177. The process with pid = 2177 is running.
-
使用clickhouse 客户端连接 clickhouse
## -m 表示可换行输入sql,sql 结束判断符号为; [hadoop@hadoop102 bin]$ clickhouse-client -m ClickHouse client version 21.7.3.14 (official build). Connecting to localhost:9000 as user default. Connected to ClickHouse server version 21.7.3 revision 54449. hadoop102 :) show databases; SHOW DATABASES Query id: 5aacb1a7-c923-419b-a790-f66fd454e66a ┌─name────┐ │ default │ │ system │ └─────────┘ 2 rows in set. Elapsed: 0.003 sec. hadoop102 :)