ClickHouse 与其他数仓架构的对比——Clickhouse 架构篇(四)

news2024/11/23 17:03:53

文章目录

  • 前言
  • ClickHouse与Hive的对比
    • 计算引擎的差异
    • ClickHouse比Hive查询速度快的原因
  • ClickHouse与HBase的对比
    • HBase的存储系统与ClickHouse的异同
    • HBase的适用场景及ClickHouse不适合的原因
  • ClickHouse与Kylin的对比
    • Kylin的架构
    • Kylin解决性能问题的思路
    • Kylin方案的缺陷
    • ClickHouse的方案

前言

本文介绍了3种常用的数据仓库(Hive, HBase, Kylin)解决方案的架构以及与ClickHouse的不同之处。这3种数据仓库解决方案都是基于分布式的前提进行的优化,而ClickHouse另辟蹊径,通过提高单机能力实现一定程度上的实时OLAP引擎,这种思路值得我们细细品味。

在正式开始分析前,我们需要明白一个道理:数据文件的组织会影响查询的性能。按行存储的数据相比于按列存储的数据在分析时相对更慢。

ClickHouse与Hive的对比

Hive本质上是一个元数据管理平台,通过对存储于HDFS上的数据文件附加元数据,赋予HDFS上的文件以数据库表的语义,并对外提供统一的Hive SQL接口,将用户提交的SQL语句翻译为对应的MapReduce程序或Hive程序,交给相应的计算引擎执行。

在对比之前先简单介绍下 Hive, 目前 Hive 基本上已经退出了历史的舞台,关于 Hive 的更多详细资料网上也有很多,读者可以百度下看看

Hive 的数据文件

  • Hive的数据文件存在多种类型, 包括 textfile, ORC, Parquet。
  • 其中 ORC 与 Hive 结合紧密,基本上就是为 Hive 量身定做的,当数据量庞大,希望获得最强的查询性能,选择ORC。
  • Parquet 在设计之初就与平台独立,因此很多开源项目都是使用 Parquet 作为列存格式,比如说现在比较流行的数据湖 Paimon,希望平台独立,具有更好的兼容性,选择Parquet。

Hive的存储系统

  • Hive本身不提供存储功能,其数据都存储于HDFS 中。

计算引擎的差异

运行模式不同

  • ClickHouse是MPP架构,强调充分发挥单机性能,没有真正的分布式表,ClickHouse的分布式表只是本地表的代理,对分布式表的查询都会被转换为对本地表的查询。这导致ClickHouse在执行部分大表Join操作时可能出现资源不足的情况。
  • 由于Hive的数据存储于分布式文件系统,因此Spark在执行计算任务时,需要依据数据分布进行调度。在必要时,Spark可以通过CBO将数据重新排序后再分散到多台机器执行,以实现复杂的查询任务。
  • ClickHouse适合简单的DW层之上的即席查询。而Spark由于其分布式特性,导致任务启动时间很长,因此不适合即席查询,但是对于大数据量的Join操作等复杂查询任务,Spark具备非常大的优势。

优化重点不同

  • ClickHouse的优化重点在提高单机的处理能力,而Spark的优化重点在于提高分布式的协作效率。

ClickHouse比Hive查询速度快的原因

需要再次强调的是,ClickHouse只是在DW层即席查询场景下比Hive快,并没有在所有场景都比Spark快。
当ClickHouse和Hive都进行即席查询时,ClickHouse比Hive快的原因。

严格数据组织更适合做分析

  • ClickHouse的数据组织相对于Hive更严格,需要用户在建表时指定排序键进行预排序。
  • 在预排序的情况下,数据在写入物理存储时已经按照一定的规律进行了聚集,在理想条件下可以大幅降低I/O时间,避免数据遍历。

更简单的调度

  • ClickHouse的目的是压榨单机性能,并没有实现分布式表,数据都在本地,这也使得ClickHouse不需要复杂的调度,直接在本机执行SQL语句即可。
  • 而 Hive 任务需要依据数据分布确定更复杂的物理计划,然后将Spark程序调度到对应的Data Node上,调度的过程非常消耗时间。

ClickHouse与HBase的对比

HBase的存储系统与ClickHouse的异同

都使用LSM算法

  • ClickHouse和HBase都使用了LSM算法实现预排序。
  • ClickHouse使用LSM算法单纯是为了预排序,且ClickHouse需要将不同分区的数据分散到对应的分区。ClickHouse在实现LSM时,每个写入语句都会创建一个独立的子分区,由后台程序定期合并。
  • HBase除了使用LSM算法实现预排序,由于HBase不存在分区的概念,因此HBase会将数据在内存中驻留,尽可能多地在一次磁盘写之前合并更多的随机写入操作,从而提高磁盘I/O的利用率。

HBase使用了HDFS

  • HBase底层使用了HDFS,使其具备大数据海量存储能力,而ClickHouse则倾向于单纯存储。

HBase的适用场景及ClickHouse不适合的原因

HBase有着独特的适用场景,而这些场景正好是ClickHouse所不适合的。
海量明细数据的随机实时查询(点查)

  • HBase底层使用Key-Value数据模型,具备非常强的点查能力,对于海量明细数据的随机查询有着天生的优势。但是HBase只有在依据Row Key进行精确点查时才能获得最大性能,如果依据列进行查找,性能会差好几个量级。

ClickHouse无法应对点查的原因

  • ClickHouse由于底层存储是以块为最小单位进行的,即使只查询一行数据也需要读取整个块,会带来大量的磁盘I/O的浪费,因此ClickHouse并不适合进行点查。

ClickHouse与Kylin的对比

Kylin的架构

下图展示了传统Kylin的架构。Kylin用于解决Hive查询速度慢导致的无法支撑交互式查询的缺陷。Kylin在架构中引入一个存储立方体(Cube)的OLAP引擎作为缓冲层,避免查询直接落到底层的Hive上。当用户进行查询时,Kylin会自动判断用户查询的数据是否存在于充当缓存的OLAP引擎中,并自动将查询路由到缓存或Hive上,解决了Hive查询慢的问题。Kylin的本质是一套缓存系统,需要用户事先依据业务规则定义缓存的内容。
image.png

Kylin解决性能问题的思路

Kylin解决问题的核心是允许用户构建模型,在模型的基础上构建Cube,依据Cube将结果计算完成并保存到OLAP数仓引擎中。使用时,通过查询OLAP引擎即可实时获取结果。当所需的结果不在OLAP中时,触发计算下推规则。计算下推是指将计算交给Kylin的底层计算引擎Hive执行。

Cube是多维分析中的一个名词,Cube映射到维度建模中指应用服务层。Kylin使用的表、模型、立方体的概念,分别对应维度建模中的ODS层、DW层、ADS层。

Kylin方案的缺陷

触发计算下推时,查询速度降低

  • 当所需的计算指标未命中Cube时,会触发Kylin的计算下推规则。由于计算下推的目的引擎是Hive,而Hive引入Kylin的根本原因就是Hive计算速度慢,因此当触发计算下推规则时,实际上Kylin的优化已经失效,即整个系统退化成原始Hive架构

需要事前建模,无法响应临时的需求

  • Kylin中Cube的构建过程需要通过计算速度慢的Hive实现,这导致无法实时构建Cube,这带来了Kylin的使用限制——无法响应临时的需求。

维度爆炸

  • Kylin解决Hive高延迟问题的核心思路是预计算,但预计算无法事先确定哪些维度组合可能会用到,可能需要穷举,由此带来了维度爆炸的问题。

ClickHouse的方案

ClickHouse通过强大的存储引擎和计算引擎,在某些场景下实现了实时响应用户的能力,由于没有使用预计算的方案,因此避开了Kylin的一些问题。在使用ClickHouse代替Kylin时,只需要将Kylin中构建模型的结果导入ClickHouse,即可直接在ClickHouse上进行基于模型的多维分析。不再需要在Kylin中构建Cube,以此获得了非常大的灵活性。

使用ClickHouse替代Kylin可以解决Kylin灵活性的问题,可以适应数据探索等数据需求不确定的场景,但当数据探索完成,形成了固定的数据需求后,需要稳定地对外提供服务时,ClickHouse并发能力弱的缺陷就暴露出来了。

对外稳定提供数据服务的场景下,可能面临非常大的并发请求,ClickHouse在应对这类场景时,也需要将这些数据固化成Cube,并使用内存表存储Cube的数据,通过固化在内存表中的Cube数据对外提供服务,实现更高的并发能力。该方案只能略微缓解ClickHouse并发能力弱的缺陷,并不能完全解决。想要解决这个问题,需要引入缓存等分布式系统中常用的架构,或者继续使用Kylin提供服务。

综上,ClickHouse和Kylin的本质区别在于模型层次的深度不同。Kylin在解决问题时,将维度建模的层次建立到了Cube的程度,可以以极高的性能对外提供服务,但也带来了灵活性差的缺陷。而ClickHouse通过强大的实时多维分析能力,只需要将维度建模建立到模型程度,即可实现实时多维分析,带来了很强的灵活性,但这也意味着极大的计算量,制约了架构的并发能力。这更加印证了架构的核心原则——有得必有失。获得一个能力的同时,一定会付出相应的代价,需要依据业务的实际需求选择架构。

ClickHouse和Kylin对于原始数据层的建模都不太擅长,对于复杂的ODS层建模工作,还是要依赖更底层的计算引擎,例如Spark。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1714767.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

信息学奥赛初赛天天练-15-阅读程序-深入解析二进制原码、反码、补码,位运算技巧,以及lowbit的神奇应用

更多资源请关注纽扣编程微信公众号 1 2021 CSP-J 阅读程序1 阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 √,错误填;除特 殊说明外,判断题 1.5 分,选择题 3 分) 源码 #in…

字符串编码转换

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 最早的字符串编码是美国标准信息交换码,即ASCII码。它仅对10个数字、26个大写英文字母、26个小写英文字母及一些其他符号进行了编码。ASC…

贪心(临项交换)+01背包,蓝桥云课 搬砖

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 0搬砖 - 蓝桥云课 (lanqiao.cn) 二、解题报告 1、思路分析 将物品按照w[i] v[i]升序排序然后跑01背包就是答案 下面证明:(不要问怎么想到的,做题多了就能想到&#xff…

总负债20.79亿,银行借款在增加,经营所得现金在减少,累计亏损在增加,易点云披露其风险(四)

来源:猛兽财经 作者:猛兽财经 全文共二十五章,总计6万字。 由于篇幅所限,分为(一)到(五)篇发布。 本文为《负债20.79亿,银行借款在增加,经营所得现金在减少,易点云披露风险》&am…

力扣爆刷第146天之贪心算法五连刷

力扣爆刷第146天之贪心算法五连刷 文章目录 力扣爆刷第146天之贪心算法五连刷总结一、455. 分发饼干二、376. 摆动序列三、53. 最大子数组和四、122. 买卖股票的最佳时机 II五、5. 跳跃游戏 总结 贪心算法的本质就是选择每一阶段的局部最优,从而达到全局最优。 一…

使用手机短信恢复软件,完成从新手到专家的进阶之路

由于各种原因,如误删、手机设备损坏等,我们可能会面临重要短信丢失的风险。现在市面上有许多手机短信恢复软件可以帮助我们解决这个问题,但从新手到专家的进阶之路并非一蹴而就的过程,它需要耐心、实践和不断地学习。以下是一篇关…

c++编程(15)——list的模拟实现

欢迎来到博主的专栏——c编程 博主ID:代码小豪 文章目录 前言list的数据结构list的默认构造尾插与尾删iterator插入和删除构造、析构、赋值copy构造initializer_list构造operator 析构函数 前言 受限于博主当前的技术水平,暂时还不能模拟实现出STL当中用…

HTTP报文

HTTP报文 报文流 HTTP报文是在HTTP引用程序之间发送的数据块,这些数据块以一种文本形式的元信息开头,这些信息描述了报文的内容和含义,后面跟着可选的数据部分,这些报文在客户端,服务器和代理之间流动。 报文流入源…

Java事务入门:从基础概念到初步实践

Java事务入门:从基础概念到初步实践 引言1. Java事务基础概念1.1 什么是事务?1.2 为什么需要事务? 2. Java事务管理2.1 JDBC 的事务管理2.2 Spring 事务管理2.2.1 Spring JDBC2.2.1.1 添加 Spring 配置2.2.1.2 添加业务代码并测试验证 2.2.2…

在做题中学习(62):矩阵区域和

1314. 矩阵区域和 - 力扣(LeetCode) 解法:二维前缀和 思路:读题画图才能理解意思:dun点点的是mat中的一个数,而要求的answer同位置的数 以点为中心上下左右延长 k 个单位所围成长方形的和。 因为最后answ…

拷贝构造、移动构造、拷贝赋值、移动赋值

最近在学习C的拷贝构造函数时发现一个问题:在函数中返回局部的类对象时,并没有调用拷贝构造函数。针对这个问题,查阅了一些资料,这里记录整理一下。 调用拷贝构造函数的三种情况: ① 用一个类去初始化另一个对象时&a…

PLC自动化行业的发展前景好吗?

第一先说plc的薪资: 整体的平均薪资还是非常可观的,在1.3w/月左右。 当然PLC是需要经验积累的,尤其需要拥有大型的系统设计经验,那将会在PLC以至于自动化行业都会吃的开。所以待遇是与自身的经验,能力,所在…

Java设计模式:享元模式实现高效对象共享与内存优化(十一)

码到三十五 : 个人主页 目录 一、引言二、享元设计模式的概念1. 对象状态的划分2. 共享机制 三、享元设计模式的组成四、享元设计模式的工作原理五、享元模式的使用六、享元设计模式的优点和适用场景结语 [参见]: Java设计模式:核心概述&…

GDPU Java 天码行空13

(一)实验目的 1、掌握JAVA中与网络程序开发相关的知识点; 2、理解并掌握网络编程开发思想及方法; 3、熟悉项目开发的分包方法和依据; 4、实现聊天室中客服端和服务器端的实现方法; 5、熟悉多线程程序开发方…

第五届武汉纺织大学ACM程序设计竞赛 个人题解(待补完)

前言: 上周周日教练要求打的一场重现赛,时长五个小时,题目难度还行,除了部分题目前我还写不出来之外,大部分题都写完或补完了,这边给出比赛链接和我的代码(有些是队友的)和题解。 正…

工作中有哪些超级好用的C/C++程序库?

视频和讲义发布在这里: B站链接

Spring框架温习

Spring Spring是一个全面的、企业应用开发一站式的解决方案,贯穿表现层、业务层、持久层。但是 Spring仍然可以和其他的框架无缝整合。 Spring 特点: 轻量级、控制反转、面向切面、容器、框架集合 Spring 核心组件: Spring 常用模块&…

Leecode热题100---二分查找--4:寻找两个正序数组的中位数

题目: 给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 解法1、暴力解法(归并) 思路: 合并 nums1,nums2 为第三个数组 排序第三个数…

亚马逊VC账号产品热销,在美国哪些智能小家电产品最好卖?

亚马逊VC账号产品在美国市场的热销,反映了消费者对于特定智能小家电产品的强烈需求。智能小家电产品因其实用性、便捷性和科技感,近年来在美国市场备受追捧。 以下是一些在亚马逊VC账号上热销的智能小家电产品: 智能扫地机器人 这类产品在美…

【传知代码】自监督高效图像去噪(论文复现)

前言:在数字化时代,图像已成为我们生活、工作和学习的重要组成部分。然而,随着图像获取方式的多样化,图像质量问题也逐渐凸显出来。噪声,作为影响图像质量的关键因素之一,不仅会降低图像的视觉效果&#xf…