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

01ClickHouseOLAP应用有如下特点:

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的存算分离,让应用更加专注于应用。—END

推荐阅读

Recommended reading

点击下列标题  资讯

| Hadoop大数据存算分离下,如何解决新旧存储共存?

| 如何解决Hadoop管理百亿小文件瓶颈?

| Hadoop大数据存算分离需要什么样的存储?

| 量身打造Hadoop HDFS高性能客户端,构筑数据湖理想底座

| 「“星”技术」如何将100个Pod挂载卷的时间缩短10倍?

| 「“星”技术」How to Copy Files— FAST'20 论文解读

clickhouse hadoop_ClickHouse如何实现存算分离?相关推荐

  1. 列名无效如何解决_XSKY ClickHouse如何实现存算分离

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

  2. 人工神经网络是如何实现存算一体的

    摘要 本文内容如题. 下图是一个神经元模型 可以将其抽象为一个数学函数y=f(w1x1+w2x2+-+wn*xn+b).也就是这个模型同时涵盖输入输出和进行计算.

  3. Hadoop存算分离实现方案探讨

    传统的 Apache Hadoop架构存储和计算是耦合在一起的, HDFS作为其分布式文件系统也存在诸多不足.那么,如何实现Hadoop的存算分离,以规避HDFS的问题.降低成本.提升性能? 01.H ...

  4. 大话云原生数据库中的存算分离

    目录 前言 传统数据库的局限 可用性低.资源利用率低 扩展成本高.运维成本高 存算分离带来的技术革命 谷歌三架马车奠定理论基础 Hadoop--存算分离的大数据架构 为什么云原生数据库中需要存算分离? ...

  5. 从 Hadoop 到云原生, 大数据平台如何做存算分离

    Hadoop 的诞生改变了企业对数据的存储.处理和分析的过程,加速了大数据的发展,受到广泛的应用,给整个行业带来了变革意义的改变:随着云计算时代的到来, 存算分离的架构受到青睐,企业开开始对 Hado ...

  6. 解读clickhouse存算分离在华为云实践

    摘要:本文是我们对clickhouse做了最简单的支持obs的适配改造. 本文分享自华为云社区<clickhouse存算分离在华为云实践>,作者: he lifu. clickhouse是 ...

  7. 使用ASP.NET核心应用程序实现存储库模式和工作单元的指南

    目录 介绍 存储库模式 优点 隔离数据访问逻辑 单元测试 高速缓存 数据源迁移 复杂查询被封装 实现的经验法则 项目结构 依赖注入(DI) DI的优点 使用代码 数据访问层 工作单位(UOW) 业务层 ...

  8. python定义浮点数数组_tensorflow之tf.record实现存浮点数数组

    因为最近打算转战Tensorflow,我将自己的脑部肿瘤分割课题从caffe转移到tensorflow上去 然后我将数据存到Tf.record里面去,出现来不收敛,以及精度上不去的等现象. 最终原因是 ...

  9. 存算分离架构的高斯Redis,用强一致提供可靠保障

    摘要:其实开源Redis的弱一致性已经不满足很多应用场景的诉求.怎么,不信? 本文分享自华为云社区<华为云企业级Redis揭秘第15期:Redis为什么需要强一致?>,作者: GaussD ...

最新文章

  1. 数据库期末复习之并发控制
  2. boost::python::detail::result相关的测试程序
  3. VTK:Math之NormalizeVector
  4. UVA 10020 Minimal coverage
  5. Fencing the Cows [USACO]
  6. ctrl键一直自动按住了_请允许Ctrl键“C位出道”
  7. mysql创建的是拉丁_将MySQL数据库从拉丁转换为UTF-8
  8. 数据结构 树和二叉树
  9. python学习中软件开发知识点_Python 学习知识点总结归纳
  10. microsoft html help workshop_云话科技 | 奥比中光Workshop技术研讨线上沙龙
  11. commandname
  12. Android Contacts 联系人源码分析
  13. FLink学习笔记:12-Flink 的Table API的常用操作
  14. java加密与解密的艺术.pdf_Java加密与解密的艺术
  15. 37岁程序员被裁,120天没找到工作,无奈去小公司,结果蒙了
  16. 手zhuan手机软件app下载排行网站源码(需要自取)
  17. KDevelop开发环境的搭建
  18. 【计算机网络】吞吐量与瓶颈链路
  19. 上市首日24小时销量1573辆,这个被马云和雷军同时看上的男人
  20. 罗辑思维时间的朋友2021跨年演讲:长大以后

热门文章

  1. python 第三方登录_【Python web 开发】social_django 集成第三方登录
  2. tomcat,Jboss,weblogic区别与比较
  3. Flask学习之基础知识与功能
  4. 分布式协议学习笔记(一) Raft 选举
  5. 网易云免费OSS服务用做Markdown图床或博客图片外链
  6. 解决 Python2 和 Python3 的共存问题
  7. GCD和NSThread延时执行对比
  8. 使用火狐的restclient发送http接口post及get请求
  9. leetcode 1217 python
  10. 暴力枚举——回文质数(洛谷 P1217)