第一章 ClickHouse专题之产生背&设计要点

1、业务背景

1.1、典型需求
  • 业务需求:用户轨迹行为分析

  • 离线架构:日志文件+数据采集组件+kafka+ETL+hIVE+报表工具。

在这里插入图片描述

  • 架构分析:
    • 1.数据时效性低:中间过程经过Kafka、ETL、调度处理,报表的时效性不理想;
    • 2.即席分析性能低:HIve存储是hdfs文件系统,查询效率不高,不适合即席查询;
    • 3.涉及到Hadoop组件多:涉及到Flume、Kafka、HDFS等,数据冗余过多,技术知识储备身后;
    • 4.数据链路长:数据链路处理流程长,繁琐容错也不好。
1.2、典型需求分析优化
  • 架构目标:
    • 1.海量数据
    • 2.实时导入
    • 3.实时查询
    • 4.多维聚合分析
  • 选型分析 - 即席查询
    • 少量数据:单机程序
    • 中级数据:ES、Mysql分库分表
    • 海量数据:Druid、Kylin、Doris、ClickHouse、Kudu等

2、OLAP概述

  • OLAP+OLTP====》难以同时满足
2.1、OLAP介绍

(1)OLTP

  • Transaction:事务处理,侧重于增删改,一般都是写模式

  • 代表:Mysql、Oracle

(2)OLAP

  • Analysis:分析,大批量数据的聚合查询,一般都是读模式
  • 代表:Hive、ClickHouse

(3)读 & 写模式区别

  • 写模式:数据插入进来会做校验,如果满足要求则插入,不满足则拒绝
  • 读模式:数据读取进来会做校验,如果满足要求则读取,不满足则报错

(4)海量数据做查询分析高效率

  • 列式数据库:便于字段查询
  • 写模式:每一列数据格式在数据写入时进行校验,保证同一列的数据类型是一样的,便于用连续内存方式进行存储,解析和压缩比较性能高
  • 排序:排序,可便于生成索引做高效的查询分析。
2.2、OLAP场景特征

(1)读多于写

​ 数据一次性写入后,不断多数据做多种ETL处理、数仓模型建设、数据挖掘等相关,其中数据读取的次数远大于写入次数。这就要求底层数据库为这个特点做专门设计,而不是盲目采用传统数据库的技术架构。

在这里插入图片描述

(2)大宽表,读大量数据但是少量列,结果集比较小

​ 通常存在一张或是几张多列的大宽表,列数高达数百甚至数千列。

​ 对数据进行分析处理时,选择其中的少数几列作为维度列、其他少数几列作为指标列,然后对全表或某一个较大范围内的数据做聚合处理。这个过程会扫描大量的行数据,但是只会用到了其中的少数列。

select department,count(id) as total from student group by department;

(3)数据批量写入,且数据不更新或少更新

OLTP类业务对于延时要求高,要避免让客户等待造成业务损失;

OLAP类业务,由于数据量非常大,通常更加关注写入吞吐,要求海量数据能够尽快导入完成,一旦导入完成历史数据将作为存档,不会再做更新、删除操作。

  • mysql:Insert、Update、Delete,一般作为Source
  • Clickhouse:单条记录的增删改,批量导入导出多

(4)无需事务,数据一致性要求低

OLAP类业务对于事务需求较少,通常导入历史日志数据,或搭配一款事务型数据库进行数据同步,多数OLAP系统都支持最终一致性。

(5)灵活多变,不适合预先建模

​ 预建模技术无法满足业务灵活多变的发展需求,维护成本过高。

2.3、常见数据库及业务场景
序号数据库名称说明
1Mysql少量结构化数据的针对单条记录的增删改查
2Hbase针对海量数据的Key-Value的增删改查
3Redis基于内存的针对Key-value类型增删改查,热数据的缓存
4mongodb文档数据库
5elasticsearch针对文件做全文检索(倒排索引)

3、列式数据库

3.1、行式存储 VS 列式存储
  • 行式存储:一行数据接着一行数据做存储,一行数据中的多个字段的值都是物理相邻的
  • 列式存储:一列数据单独存储,多行数据的相同列的值在物理存储上是相邻的

在这里插入图片描述

  • 行式存储:逐行扫描库表文件
  • 列式存储:逐列扫描库表文件

在这里插入图片描述

3.2、列式存储特性

(1)读取扫描数据量少

​ 列式存储模式下,只读取参与计算的列即可,极大的减低了IO cost,加速了查询

(2)高压缩比

​ 同一列的数据属于同一个类型,压缩效果显著。列存往往有着高达十倍甚至更高的压缩比,节省了大量的存储空间,减低了存储成本。

(3)读取时间少

​ 更高的压缩比意味着更小的data size,从磁盘中读取相应耗时更短。

4、ClickHouse概述

4.1、ClickHouse基础介绍

(1)适用场景

  • 1、Web和App数据分析
  • 2、广告网络和RTB
  • 3、电信
  • 4、电子商务和金融
  • 5、信息安全
  • 6、监测和遥测
  • 7、时序数据
  • 8、商业智能
  • 9、在线游戏
  • 10、物联网

(2)不适用场景

  • 1、事物性工作(OLTP)
  • 2、高并发的键值访问
  • 3、Blob或者文档存储
  • 4、超标准化的数据

(3)优点

①真正的面向列的 DBMS

ClickHouse 作为一个被设计用来在实时分析的 OLAP 组件,只是在高效率的分析方面性能发挥到极 致,那必然就会在其他方面做出取舍: ClickHouse 是一个 DBMS,而不是一个单一的数据库。它允许在运行时创建表和数据库、加载数据和运行 查询,而无需重新配置和重新启动服务器。

②数据压缩

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

③磁盘存储的数据

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

④多核并行处理

多核多节点并行化大型查询。

⑤在多个服务器上分布式处理

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

⑥SQL支持

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

⑦向量化引擎

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

⑧实时数据更新

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

⑨支持近似计算

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

⑩数据复制和对数据完整性的支持。

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

4.2、ClickHouse单机安装

(1)安装前准备

  • CentOS7打开文件数限制
#在 /etc/security/limits.conf 这个文件的末尾加入一下内容:
sudo vim /etc/security/limits.conf

* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072

#在 /etc/security/limits.d/90-nproc.conf 这个文件的末尾加入一下内容:
vim /etc/security/limits.d/90-nproc.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072

#重启服务器之后生效,用 ulimit -n 或者 ulimit -a 查看设置结果
ulimit -n 
ulimit -a
  • CentOS7取消SELINUX
#修改 /etc/selinux/config 中的 SELINUX=disabled 后重启
vim /etc/selinux/config

SELINUX=disabled
  • 关闭防火墙
systemctl status firewalld.service 
systemctl stop firewalld.service 
systemctl start firewalld.service
  • 安装依赖
yum install -y libtool 
yum install -y *unixODBC*

(2)单机模式安装

​ ClickHouse的安装可以使用 yum在线安装,也可以使用 rpm 离线安装的方式! 具体信息见官网文档:https://clickhouse.tech/#quick-start

  • 准备操作
grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"
  • 下载安装包
#下载地址:https://repo.yandex.ru/clickhouse/rpm/stable/x86_64/
clickhouse-server.noarch.rpm 
clickhouse-common-static.rpm 
clickhouse-client.noarch.rpm

在这里插入图片描述

  • 安装
rpm -ivh clickhouse-common-static-20.9.2.20-2.x86_64.rpm
rpm -ivh clickhouse-common-static-dbg-20.9.2.20-2.x86_64.rpm
rpm -ivh clickhouse-server-20.9.2.20-2.x86_64.rpm
rpm -ivh clickhouse-client-20.9.2.20-2.x86_64.rpm
  • 启动服务端
#前台启动
clickhouse-server --config-file=/etc/clickhouse-server/config.xml

#后台启动
nohup clickhouse-server --config-file=/etc/clickhouse-server/config.xml 1>~/logs/clickhouse_std.log 2>~/logs/clickhouse_err.log &

在这里插入图片描述

  • 启动客户端
clickhouse-client
或者:
TZ=Asia/Shanghai clickhouse-client

在这里插入图片描述

  • 基本使用
#1、创建库
create database test;

#2、切换库
use test;

#3、创建表
create table test01(id Int8, name String) engine = TinyLog;

#4、查询表列表
show tables;

在这里插入图片描述

  • 安装成功的核心目录

Ⅰ、/etc/clickhouse-server

服务端的配置文件目录,包括全局配置config.xml和用户配置users.xml 等。
Ⅱ、/var/lib/clickhouse**

默认数据存储目录,通常会修改默认路径配置,将数据保存到大容量磁盘挂 载路径
Ⅲ、/var/log/clickhouse-server

默认日志保存目录,通常会修改路径配置将日志保存到大容量磁盘 挂载的路径

  • 可执行文件

Ⅰ、clickhouse:主程序的可执行文件。
Ⅱ、clickhouse-client:一个指向ClickHouse可执行文件的软链接,供客户端连接使用。
Ⅲ、clickhouse-server:一个指向ClickHouse可执行文件的软链接,供服务端启动使用。
Ⅳ、clickhouse-compressor;内置提供的压缩工具,可用于数据的正压反解。

附录:离散知识点

1、client连接拒绝

(1)报错

Connecting to localhost:9000 as user default.
Code: 210. DB::NetException: Connection refused (localhost:9000)

(2)解决方案

#systemctl启动
[root@tcloud ~]# systemctl start clickhouse-server.service
[root@tcloud ~]# systemctl status clickhouse-server.service

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随缘清风殇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值