ClickHouse如何实现存算分离? 科汇科技-四川 XSKY 虚拟化 分布式存储 官方授权分销代理商

在介绍ClickHouse之前,说一下OLAP。OLAP也叫联机分析处理(Online Analytical Processing)。OLAP系统以维度模型来存储历史数据,其主要存储描述性的数据并且在结构上都是同质的。

01
ClickHouse

OLAP应用有如下特点:

1、大多数的请求是读请求;
2、每次查询都从数据库中读取大量的行,但是同时又仅需要少量的列;
3、宽表,即每个表包含着大量的列;
4、处理单个查询时需要高吞吐量(每个服务器每秒高达数十亿行);
5、每一个查询除了一个大表外都很小;
6、查询结果明显小于源数据,换句话说,数据被过滤或聚合后能够被盛放在单台服务器的内存中。

OLAP引擎的痛点:

SparkSQL & Hive性能不够快;

Impala对内存要求高,需要依赖Hadoop生态软件和基础。

综上,市面上的OLAP引擎不够理想,这时,ClickHouse来了。ClickHouse由俄罗斯yandex公司开发,专为在线数据分析而设计,能够使用SQL查询生成实时数据报告,在2016年开源。
首先,也是ClickHouse*突出的优点:“快”。ClickHouse官方测试对比,1亿的数据集测试中,ClickHouse的性能,比Hive快259倍,比MySQL快801倍;

ClickHouse vs Vertica vs Greeplum
其次,ClickHouse足够轻量,不依赖Hadoop生态。除了解决上述的问题,ClickHouse还有如下优点:

1、列式存储+数据压缩;
2、并行和分布式查询;
3、支持SQL;
4、实时数据更新。

02
存储需求

ClickHouse作为OLAP的新宠备受关注,国内大厂也纷纷跟进大规模使用。那么ClickHouse对存储有什么需求?

ClickHouse早期并没有走Hadoop生态,而是采用Local attached storage(本地存储)的存储方式,其可靠性通过原生支持shard + replication来保障。也可以通过RAID 5方式,来提高磁盘数据的可靠性和读取能力。

但ClickHouse存储毕竟不是专业存储,面临着以下几个问题:

1、在ClickHouse众多的表引擎中,又属合并树(MergeTree)表引擎及其家族系列(*MergeTree)*为强大,在生产环境绝大部分场景中都应该使用此系列的表引擎。ReplicatedMergeTree实现了ClickHouse的replication特性,需要依赖ZooKeeper实现分布式系统的协作,当并发写入量较大时,ZooKeeper对表元数据同步有延迟,会成为集群的瓶颈,降低集群整体性能;

2、当数据写入ClickHouse某个节点异常,导致副本间的数据不一致;

3、难扩容,难维护。

针对上述问题,XSKY为用户的ClickHouse需求打造了高可用的软件定义存储解决方案:

本身高可用的存储,去中心化设计,不会出现单个瓶颈的情况;

强一致性存储系统,*数据一致性;

支持无限制横向扩展,使存储性能与容量同步线性增长,同时配合图形化的管理界面,解决运维问题。

03
ClickHouse on S3

上面提到了MergerTree,这里说一下MergeTree在ClickHouse存储方式。默认情况下ClickHouse的数据存储在/var/lib/clickhouse/data目录下:

说明:

1、default:数据库名;
2、hdfs_engine_table:表名;
3、2a1dedbe81258ce26f3c450185e5550811_0:其中的一个part,每次插入数据就会生成一个part,part会不定时的merge成更大的一个part,每个part里的数据都是按照主键排序存储;
4、checksums.txt:校验值文件;
5、columns.txt:列名文件,记录了表中的所有列名;
6、x.bin:每一列的真实数据;
7、x.mrk2:每一列的mrk文件;
8、primary.idx:主键文件,存储了主键值。
早在去年的时候,ClickHouse社区就进了一个PR:https://github.com/ClickHouse/ClickHouse/pull/7946,关于支持S3&HDFS 的计划,并在之后陆续合入了DiskS3,终于在ClickHouse v20.4.2.9版本正式合入PR: https://github.com/ClickHouse/ClickHouse/pull/9646,MergeTree全面支持S3。
那么,怎么让ClickHouse的数据存储在S3上?仅需如下两个步骤即可:
一、创建存储配置
在/etc/clickhouse-server/config.d目录下创建配置文件并添加如下配置:

说明:

1、YOUR_ENDPOINT:对象存储的endpoint,如:10.0.x.x:8060;
2、BUCKET_NAME:桶名;
3、OBJECT_PREFIX:对象名前缀;
4、AK:对象用户的访问密钥;
5、SK:对象用户的秘密密钥。

二、创建MergeTree表

在创建表时设置上一步骤中创建的存储策略SETTINGS storage_policy = ‘s3’即可。

经过上述两个步骤就可以进行插入删除操作。
我们先来看看s3_table是怎么存储到对象存储上的?
如下,这么看跟普通的MergeTree没有区别?

其实真实的数据已经存储在对象存储上,比如:1_2_2_0/count.txt文件中记录着真正的位置。

可通过S3 Browser查看到指定目录下已存了真实数据。

04
应用测试

如上讲述了如何使用对象存储存储ClickHouse的数据,下面就做一个简单的测试。这里使用航班飞行的真实数据。
说明:该ClickHouse环境为虚机测试环境,16G的内存,4核CPU,不能体现出性能,仅做功能测试。
1、通过如下命令下载2017年的飞行数据:

2、创建ontime数据库:

3、将下载好的数据导入到ClickHouse:

4、进行数据查询:
查看导入的数据量:

查询2017*的目的地:

查询*的出发城市:

05
总结

近年来ClickHouse发展迅猛,除了其丰富的功能,优秀的性能,还有就是在当下不可忽视的数据量增长。XSKY对象存储可为企业提供全面的云存储安全服务,其可扩展的性能、先进的数据存储和管理功能,更重要的是能够实现ClickHouse的存算分离,让应用更加专注于应用。

 

 

 

IT 解决方案:

XSKY服务器虚拟化解决方案
XSKY私有云解决方案
XSKY容器解决方案
XSKY企业级应用解决方案
XSKY桌面虚拟化(VDI)解决方案
XSKY容灾解决方案
XSKY开发测试平台解决方案
XSKY分支机构解决方案
XSKY新建数据中心解决方案

应用场景:

双活
容器
大数据
云平台
云桌面

产品规格:
SDS 软件
XCBS 云后端存储
XEBS 块存储
XEUS 统一存储
XEOS 对象存储
XEDP 统一数据平台
SDS 一体化产品
XSCALER EXPRESS 2000:XE2020、XE2030、XE2050
XSCALER 3000

服务区域:

成都  xsky、绵阳  xsky、自贡  xsky、攀枝花  xsky、泸州  xsky、

德阳  xsky、广元  xsky、遂宁  xsky、内江  xsky、乐山  xsky、

资阳  xsky、宜宾 xsky、南充  xsky、达州  xsky、雅安  xsky、

阿坝藏族羌族自治州 xsky、凉山彝族自治州 xsky、广安  xsky、巴中  xsky、眉山  xsky

服务内容:

软件安装部署服务
业务对接服务
故障处理与生产变更服务
SDS 架构咨询服务
数据迁移服务
现场保障服务
集群环境变更服务
健康巡检服务
集群环境优化服务
集群升级服务
接口开发服务
集群*实施服务
文档开发服务
开源 SDS 升级服务
技术服务经理(TAM)

生产级分布式块存储,分布式存储 SDS 横向扩展存储,软件定义块存储系统

XSKY :SDS,软件定义存储,分步式存储,分布式软件定义存储

成都科汇科技有限公司( SDS 解决方案专家)

地址:成都市人民南路四段1号时代数码大厦18F

电话:400-028-1235

QQ:     1325383361

手机:180 8195 0517(微信同号)

 

 

返回顶部