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

文章目录

  • 前言
  • 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。


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

图片处理软件有哪些?这三款软件好用

图片处理软件有哪些?在当今这个数字化时代,图片处理软件成为了我们日常生活和工作中不可或缺的工具。无论是为了修饰个人照片,还是为了设计专业海报,这些软件都能帮助我们轻松实现创意和美化。那么,究竟有哪些热门的图…

CEEMDAN +组合预测模型(CNN-Transfromer + XGBoost)

注意:本模型继续加入 组合预测模型全家桶 中,之前购买的同学请及时更新下载! 往期精彩内容: 时序预测:LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较-CSDN博客 VMD CEEMDAN 二次分解,Transformer-BiGRU预测模…

read test

功能性语言: 在.sh脚本下,read -p ——答应 read -t 时间 ——时间完成限制 特别注意空格。 test -n测试是内容一定要加双引号。 test 变量1 -ne 变量2 即比较大小。

视频汇聚EasyCVR平台视图库GA/T 1400协议与GB/T 28181协议的区别

在公安和公共安全领域,视频图像信息的应用日益广泛,尤其是在监控、安防和应急指挥等方面。为了实现视频信息的有效传输、接收和处理,GA/T 1400和GB/T 28181这两个协议被广泛应用。虽然两者都服务于视频信息处理的目的,但它们在实际…

22net冒泡排序与插入排序

冒泡排序 观看视频 【python练习题】每日一练_第八天_冒泡排序_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1QT4y197pa/?spm_id_from333.337.search-card.all.click&vd_source498ae9e9c7a8a7d16da872c9d74cdc38PS:视频中用的了numpy库,大…

10W QPS高并发,如何防止重复下单?

小北说在前面 10wqps高并发,如何防止重复提交/支付订单? 10wqps高并发,如何防止重复下单? 10wqps高并发,如何防止重复支付? 10wqps高并发,如何解决重复操作问题? 最近有小伙伴在面试…

这有一封“数字赋能 强农兴村”的邀请函,请查收→

2024年6月5日至7日,以“数字赋能 强农兴村”为主题的2024中国(南京)数字乡村博览会暨第八届中国(南京)国际智慧农业博览会将在江苏南京举办。珈和科技在农业AI大数据展区的H16展位与您相约,共襄盛会。 私信…

iPhone用户推荐使用的藏汉翻译小助手:藏汉翻译通小程序,支持藏文OCR识别文字提取,卫藏语、安多语、康巴语学习背单词!

网上冲浪时,遇到不会的汉语词汇,可以复制到藏汉翻译通小程序中进行翻译。如果不会拼音,可以使用图片识别功能扫一扫文字,即可OCR识别提取文字。 此外,藏汉翻译通小程序现在还支持背单词和会话速成课程,支持…

java调用远程接口下载文件

在postman中这样下载文件 有时下载文件太大postman会闪退,可以通过代码下载,使用hutool的http包

HAL库使用FreeRTOS实时操作系统时配置时基源(TimeBase Source)

需要另外的定时器,用systic的时候生成项目会有警告 https://blog.51cto.com/u_16213579/10967728

java高级——Collection集合之List探索(包含ArrayList、LinkedList、Vector底层实现及区别,非常详细哦)

java高级——Collection集合之List探索 前情提要文章介绍提前了解的知识点1. 数组2. 单向链表3. 双向链表4. 为什么单向链表使用的较多5. 线程安全和线程不安全的概念 ArrayList介绍1. 继承结构解析1.1 三个标志性接口1.2 AbstractList和AbstractCollection 2. ArrayList底层代…

企业网站有必要进行软件测试吗?网站测试有哪些测试流程?

企业网站在现代商业中扮演着重要的角色,它不仅是企业形象的重要体现,也是与客户、合作伙伴进行沟通与交流的重要渠道。然而,由于企业网站的复杂性和关键性,其中可能存在各种潜在的问题和隐患。因此,对企业网站进行软件…

HTB-SherlocksDFIR

Sherlocks 中关于 DFIR 的一些内容,按照时间线整理,尚未完成,持续更新​ Brutus 和上一次做的 Recollection 机器一样,主要学习一下相关的知识,练习一下。按照机器描述,在学习完成后将熟悉 auth.log 和 wtm…

OpenHarmony面向万物智联的应用框架的思考与探索

应用框架,是操作系统连接开发者生态,实现用户体验的关键基础设施。业务的飞速发展促进了应用框架不断演进和变化。 01►业界应用框架的演进 应用是用户使用操作系统/设备的入口,应用框架则是应用开发和运行的基础设施。以移动端为例&#x…

利用EasyCVR视频智能监控技术,构建智慧化考场监管体系

随着科技的进步,视频监控在各个领域的应用越来越广泛,其中在考场中的应用尤为显著。视频监控不仅能够提高考场的监管水平,确保考试的公平、公正和公开,还能有效预防和打击作弊行为,为考生营造一个良好的考试环境。 传…

Windows配置java环境JDK

配置jdk环境非常简单,大概有以下几步: 下载jdk安装,然后双击进行安装配置环境变量(也不是一定非要配置环境变量,配置环境变量的好处就是,在任何位置,系统都可以找到安装路径,非常实用且方便) …

小白跟做江科大32单片机之LED流水灯

1.复制下面地址新建的工程,改名为3-2 LED流水灯 小白跟做江科大32单片机之LED闪烁-CSDN博客https://blog.csdn.net/weixin_58051657/article/details/139295351?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%2213929…

跨境人必读:X(原Twitter)和Facebook区别是什么?

在今日全球化的商业环境中,跨境电商领域的企业和独立站卖家正逐渐认识到社交媒体营销的巨大潜力。特别是X(原Twitter)和Facebook,作为领先的社交媒体平台,它们的使用不仅能够提升品牌知名度,还能直接影响销…

【日记】终于鼓起勇气买了吹风机!(356 字)

正文 好忙。今天比昨天还要忙,水都没喝几口。嗯,好像只喝了两口。 今天补了一份印鉴卡,销了一个户,变了一个户,弄了一大堆资料找人签字,还顺带要解决一个押品的历史遗留问题。 中午睡得好香,都不…

Llama改进之——RoPE旋转位置编码

引言 旋转位置编码(Rotary Position Embedding, RoPE)将绝对相对位置依赖纳入自注意力机制中,以增强Transformer架构的性能。目前很火的大模型LLaMA、QWen等都应用了旋转位置编码。 之前在[论文笔记]ROFORMER中对旋转位置编码的原始论文进行了解析,重点…