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

01ClickHouse

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需求打造了高可用的软件定义存储解决方案:

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

· 强一致性存储系统,保证数据一致性;

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

03ClickHouse 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

列名无效如何解决_XSKY ClickHouse如何实现存算分离相关推荐

  1. clickhouse hadoop_ClickHouse如何实现存算分离?

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

  2. SQL Server出现对象名和列名无效的解决方法

    SQL Server出现对象名和列名无效的解决方法 首先推一波自己的hexo博客 http://www.zhazhalin.top:88/ 想必很多朋友在用sql server在学习的时候会遇到过对象 ...

  3. 列名无效怎么解决_PowerQuery批量合并Excel,前面有空行且不相等的解决办法

    关于PowerQuery批量汇总多个Excel工作簿,该功能非常经典实用,操作起来也很简单,之前已经有几篇文章介绍过该功能以及可能遇到的各种问题, 使用Power Query是一种什么体验? 批量合并 ...

  4. 列名无效怎么解决_电脑win键失效怎么办? 键盘win键无效的解决办法

    电脑win键失效怎么办?在使用windows系统的时候,发现一个问题,就是win键失效了,怎么按都没有反应,该怎么办呢?羡慕我们就来分享键盘win键无效的三种解决办法,需要的朋友可以参考下 对于编程人 ...

  5. SQL SERVER 2000写存储过程出现列名无效的解决方法

    举一个Northwind的例子.DECLARE @m_LastName nvarchar(20) DECLARE @Sql varchar(256)SET @m_LastName = 'Fuller' ...

  6. SQLSERVER存储过程列名无效的解决方法

    2019独角兽企业重金招聘Python工程师标准>>> DECLARE @m_LastName nvarchar(20) DECLARE @Sql varchar(256)SET @ ...

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

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

  8. 已解决 java.sql.SQLException: 列名无效

    已解决 java.sql.SQLException: 列名无效 说明在获取ResultSe结果集的时候字段与查询到的表中字段没有一至的, 解决方案: 更改rs.getObject(" 字段名 ...

  9. ibatis返回结果映射到HashMap时,列名无效的问题

    遇到问题: 1.项目开发过程中在xml配置文件中使用$tableName/sql$时,报"列名无效"错误,后来经过查询,发现是ibatis缓存 了上一次查询的表结构的原因.解决办法 ...

最新文章

  1. PanoNet3D:一个基于激光雷达点云语义和几何理解的3D目标检测方法
  2. HTTP 方法:GET 对比 POST
  3. 最简单的教程:在Ubuntu操作系统里安装Docker
  4. TTL电平、CMOS电平、RS232通信电平的概念及区别
  5. linux tune2fs命令详解
  6. 【Ext.Net学习笔记】01:在ASP.NET WebForm中使用Ext.Net
  7. ros(5)service client实现
  8. Idea搭建SpringCloud(四)------利用Feign实现负载均衡
  9. 判断可逆素数的c语言程序,C语言可逆素数教程
  10. php1108脱机使用,惠普p1108能扫描吗 打印机出现脱机解决方法【详解】
  11. windows虚机设定永久静态路由
  12. IED 61850 总体建模原则
  13. swoole - 简介
  14. C#实现自定义打印文字和图片
  15. playcanvas 引擎
  16. 低学历的人该怎么破局,给你三个方法
  17. Idel插件jrebel安装以及破解教程
  18. win python ide_Win中同时安装python2和python3及SulimeText3的python IDE搭建
  19. Javascript 实现城市选择控件
  20. 文件包含(LFI/RFI)

热门文章

  1. Android之如何ubuntu环境下在手机里面快速找到apk的位置然后拉下来
  2. 《看聊天记录都学不会C语言?太菜了吧》(11)2分钟领悟数组
  3. sql count用法_SQL学习笔记3:count(*)函数
  4. python利用特征进行可视化样本显示_利用Python进行机器学习之特征选择
  5. resque java_php-resque :基于Redis的后台任务系统
  6. 千万别让男朋友穿你的短裙......
  7. 当Java、C++、Python等编程语言都变成妹子。。。
  8. 项目管理 计算机仿真,分析计算机仿真技术在工程项目施工管理中的运用.pdf
  9. mysql between 查询不出来_mysql的语句优化
  10. java aspose重叠_Aspose.Words - 在特定位置合并两个文档