您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

主流开源的OLAP引擎详细对比介绍

时间:2020-08-18 16:17:01  来源:知乎  作者:会飞的鱼66
本文主要介绍了主流开源的OLAP引擎:Hive、Sparksql、Presto、Kylin、Impala、Druid、Clickhouse 等,逐一介绍了每一款开源 OLAP 引擎,包含架构、优缺点、使用场景等,希望可以给大家有所启发。

PS: 文章较长,建议收藏慢慢看。

说起 OLAP 要追溯到 1993 年。

准则1 OLAP模型必须提供多维概念视图 准则2 透明性准则 准则3 存取能力准则 准则4 稳定的报表能力 准则5 客户/服务器体系结构 准则6 维的等同性准则 准则7 动态的稀疏矩阵处理准则 准则8 多用户支持能力准则 准则9 非受限的跨维操作 准则10 直观的数据操纵 准则11 灵活的报表生成 准则12 不受限的维与聚集层次

OLAP场景的关键特征

大多数是读请求 数据总是以相当大的批(> 1000 rows)进行写入 不修改已添加的数据 每次查询都从数据库中读取大量的行,但是同时又仅需要少量的列 宽表,即每个表包含着大量的列 较少的查询(通常每台服务器每秒数百个查询或更少) 对于简单查询,允许延迟大约50毫秒 列中的数据相对较小:数字和短字符串(例如,每个URL 60个字节) 处理单个查询时需要高吞吐量(每个服务器每秒高达数十亿行) 事务不是必须的 对数据一致性要求低 每一个查询除了一个大表外都很小 查询结果明显小于源数据,换句话说,数据被过滤或聚合后能够被盛放在单台服务器的内存

与OLAP 不同的是,OLTP系统强调数据库内存效率,强调内存各种指标的命令率,强调绑定变量,强调并发操作,强调事务性。

OLAP系统则强调数据分析,强调SQL执行时长,强调磁盘I/O,强调分区。



OLAP开源引擎

目前市面上主流的开源OLAP引擎包含不限于:Hive、Spark SQL、Presto、Kylin、Impala、Druid、Clickhouse、Greeplum等,可以说目前没有一个引擎能在数据量,灵活程度和性能上做到完美,用户需要根据自己的需求进行选型。

从事数据开发工作的小伙伴,大概率用过以上的几种甚至全部。所以下面就开门见山了,默认大家熟悉大数据的专业名词和生态环境。

Hive http://hive.Apache.org

Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的 sql 查询功能,可以将 sql 语句转换为 MapReduce 任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

Spark SQL http://spark.apache.org/sql

SparkSQL的前身是Shark,它将 SQL 查询与 Spark 程序无缝集成,可以将结构化数据作为 Spark 的 RDD 进行查询。SparkSQL作为Spark生态的一员继续发展,而不再受限于Hive,只是兼容Hive。

几点说明:

1)Spark SQL的应用并不局限于SQL;

2)访问hive、json、parquet等文件的数据;

3)SQL只是Spark SQL的一个功能而已;

4)Spark SQL这个名字起的并不恰当;

Spark SQL在整个Spark体系中的位置如下

看图说话,分成三个部分,第一部分是前端的,第二部分是后端的,对三个部分是中间的Catalyst,这个Catalyst是整个架构的核心。

关于架构的流程总结,下面引用知乎@ysiwgtus 的内容

1、首先我们看前端。前端有不同种的访问方式。

1)典型的我们可以使用hive,你hive过来就是一个SQL语句,SQL语句就是一个字符串,那么这个字符串如何才能够被Catalyst进行解析呢,或者说如何将一个SQL语句翻译成spark的作业呢,他要经过解析的,有一个抽象语法树,这是第一种访问方式。

2)第二种访问方式,我们可以通过spark的应用程序,编程的方式来操作,编程的时候我们可以使用SQL,也可以使用dataframe或者是dataset api。

3)第三种是Streaming SQL,也就是说流和SQL综合起来使用。

2、我们看Catalyst

1)前端三个访问方式,当前端过来以后他首先会生成一个Unresolved Logical Plan,也就是一个没有彻底解析完的一个执行计划,这个执行计划会和我们的元数据,也就是metastore里面的schema一个表信息进行整合然后生成一个Logical Plan(逻辑执行计划)。

2)那么这个逻辑执行计划是最原始的,中间还会做各种优化也很多规则作用上去,也就是图中的Optimization Rules,然后进行优化以后生成优化过后的逻辑执行计划,就是图中的Optimized Logical Plan。

3)那么逻辑执行计划生成完了以后,才会生成物理执行计划,也就是我们spark的一个作业。

那么从你的SQL语句解析成抽象语法树之后后续的部分全部交给Catalyst来完成,包括你逻辑执行计划的生成,逻辑执行计划的优化都是由Catalyst完成的,我们再回顾一下shark,他的解析然后逻辑执行计划的生成和优化全部都是依赖于hive的,那么这就是sparkSQL和hive典型的一个区别从抽象语法树之后,也就是图上AST之后完全由sparkSQL里的Catalyst接管以后,由他来生成物理执行计划,并最终提交到生产上面去运行就行了。

3、以上就是sparkSQL架构的整体的流程,这个流程当中主要有几个部分,语法树、逻辑执行计划、优化之后的逻辑执行计划、物理执行计划。如果熟悉SQL的执行流程或者了解hive的SQL语句是怎么样从SQL翻译成mapreduce作业的话,那么其实你会看出来整个流程都是非常相似的,那么在SQL on hadoop框架里面的那么多框架,只要是基于SQL的,他的大概流程都是这样子的,从SQL解析过后成为一个抽象语法树,然后再到了逻辑执行计划,然后逻辑执行计划优化,再到物理执行计划,再到物理执行计划的优化,最终生成你对应框架的作业,有可能是mapreduce作业,可能是spark作业,提交到对应的集群上运行就可以了。 Presto http://prestodb.io

Presto支持标准的ANSI SQL,包括复杂查询、聚合(aggregation)、连接(join)和窗口函数(window functions)。作为Hive和Pig(Hive和Pig都是通过MapReduce的管道流来完成HDFS数据的查询)的替代者,Presto 本身并不存储数据,但是可以接入多种数据源,并且支持跨数据源的级联查询。

Presto没有使用MapReduce,它是通过一个定制的查询和执行引擎来完成的。它的所有的查询处理是在内存中,这也是它的性能很高的一个主要原因。Presto和Spark SQL有很大的相似性,这是它区别于Hive的最根本的区别。

Presto由于是基于内存的,而 Hive 是在磁盘上读写的,因此 presto 比hive快很多,但是由于是基于内存的计算当多张大表关联操作时易引起内存溢出错误。

Apache Kylin™ http://kylin.apache.org/cn

Apache Kylin™是一个开源的、分布式的分析型数据仓库,提供Hadoop/Spark 之上的 SQL 查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由 eBay 开发并贡献至开源社区。它能在亚秒内查询巨大的表。

Kylin 提供与多种数据可视化工具的整合能力,如 Tableau,PowerBI 等,令用户可以使用 BI 工具对 Hadoop 数据进行分析。

简单的讲解一下上面的架构图,以Hive或者Kafka作为数据源,里面保存着真实表,而Kylin做的就是将数据进行抽象,通过引擎实现Cube的构建。将Hbase作为数据的仓库,存放Cube。因为Hbase的直接读取比较复杂,所以Kylin提供了近似SQL和HQL的形式,满足了数据读取的基本需求。对外提供了RestApi和JDBC/ODBC方便操作。

Kylin自身就是一个MOLAP系统,多维立方体(MOLAP Cube)的设计使得用户能够在Kylin里为百亿以上数据集定义数据模型并构建立方体进行数据的预聚合。立方体的设计,我的理解是就是以空间换时间,通过定义一系列的纬度,对每个纬度的组合进行预先计算并存储。有N个纬度,就会有2的N次种组合。所以最好事先控制好纬度的数量,因为存储量会随着纬度的增加爆炸式的增长,产生灾难性后果。

Impala http://impala.apache.org

Impala 是 Cloudera 公司推出,提供对 HDFS、Hbase 数据的高性能、低延迟的交互式 SQL 查询功能。Impala 使用 Hive的元数据, 完全在内存中计算。是CDH 平台首选的 PB 级大数据实时查询分析引擎。

执行流程

1、基于内存进行计算,能够对PB级数据进行交互式实时查询、分析

2、无需转换为MR,直接读取HDFS及Hbase数据 ,从而大大降低了延迟。

Impala没有MapReduce批处理,而是通过使用与商用并行关系数据库中类似的分布式查询引擎(由Query Planner、Query Coordinator和Query Exec Engine三部分组成

3、C++编写,LLVM统一编译运行

在底层对硬件进行优化, LLVM:编译器,比较稳定,效率高

4、兼容HiveSQL

支持hive基本的一些查询等,hive中的一些复杂结构是不支持的

5、具有数据仓库的特性,可对hive数据直接做数据分析

6、支持Data Local

数据本地化:无需数据移动,减少数据的传输

7、支持列式存储

可以和Hbase整合:因为Hive可以和Hbasez整合

8、支持JDBC/ODBC远程访问

Impala劣势

1、对内存依赖大

只在内存中计算,官方建议128G(一般64G基本满足),可优化: 各个节点汇总的节点(服务器)内存选用大的,不汇总节点可小点

2、C++编写 开源 ?

对于JAVA, C++可能不是很了解

3、完全依赖hive

4、实践过程中分区超过1w 性能严重下下降

定期删除没有必要的分区,保证分区的个数不要太大

5、稳定性不如hive

因完全在内存中计算,内存不够,会出现问题, hive内存不够,可使用外存 Impala不提供任何对序列化和反序列化的支持。 Impala只能读取文本文件,而不能读取自定义二进制文件。 每当新的记录/文件被添加到HDFS中的数据目录时,该表需要被刷新。 Druid http://druid.apache.org

说起 Druid,大家首先想到的是阿里的 Druid 数据库连接池,而本文介绍的 Druid 是一个在大数据场景下的解决方案,是需要在复杂的海量数据下进行交互式实时数据展现的 BI/OLAP 工具。

Druid 的架构是 Lambda 架构,分成实时层( Overlord、 MiddleManager )和批处理层( Broker 和 Historical )。

更多关于架构的描述,可以看官方文档或者 《Druid在有赞的实践》

目前 Druid 广泛应用在国内外各个公司,比如阿里,滴滴,知乎,360,eBay,Hulu 等。Druid 之所以能够在 OLAP 家族中占据一席之地,主要依赖其强大的 MPP 架构设计。初次之外,它还运用到了四点重要的技术,分别是:预聚合、列式存储、字典编码、位图索引。

常见的应用场景:(https://druid.apache.org/use-cases)

点击流分析(网络和移动分析) 风险/欺诈分析 网络遥测分析(网络性能监控) 服务器指标存储 供应链分析(制造指标) 应用程序性能指标 商业智能/ OLAP

Druid的核心设计结合了数据仓库,时间序列数据库和搜索系统的思想,以创建一个统一的系统,用于针对各种用例的实时分析。Druid将这三个系统中每个系统的关键特征合并到其接收层,存储格式,查询层和核心体系结构中。

(https://druid.apache.org/technology)

什么样的业务适合用 Druid?

建议如下:

时序化数据:Druid 可以理解为时序数据库,所有的数据必须有时间字段。 实时数据接入可容忍丢数据(tranquility):目前 tranquility 有丢数据的风险,所以建议实时和离线一起用,实时接当天数据,离线第二天把今天的数据全部覆盖,保证数据完备性。 OLAP 查询而不是 OLTP 查询:Druid 查询并发有限,不适合 OLTP 查询。 非精确的去重计算:目前 Druid 的去重都是非精确的。 无 Join 操作:Druid 适合处理星型模型的数据,不支持关联操作。 数据没有 update 更新操作,只对 segment 粒度进行覆盖:由于时序化数据的特点,Druid 不支持数据的更新。 Clickhouse clickhouse.tech

Clickhouse 由俄罗斯 yandex 公司开发。专为在线数据分析而设计。Yandex是俄罗斯搜索引擎公司。官方提供的文档表名,ClickHouse 日处理记录数"十亿级"。

这个列式存储数据库的跑分要超过很多流行的商业MPP数据库软件,例如Vertica。

特性:

1.真正的面向列的DBMS

2.数据压缩

3.磁盘存储的数据

览量和会话。

4.多核并行处理

5.在多个服务器上分布式处理

6.SQL支持

7.向量化引擎

8.实时数据更新

9.索引

10.支持在线查询

11.支持近似计算

12.数据复制和对数据完整性的支持。

使用ClickHouse也有其本身的限制,包括:

缺少高频率,低延迟的修改或删除已存在数据的能力。仅能用于批量删除或修改数据。 没有完整的事务支持 不支持二级索引 有限的SQL支持,join实现与众不同 不支持窗口功能 元数据管理需要人工干预维护

目前还没有一个OLAP系统能够满足各种场景的查询需求。其本质原因是,没有一个系统能同时在数据量、性能、和灵活性三个方面做到完美,每个系统在设计时都需要在这三者间做出取舍。



Tags:OLAP引擎   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
OLAP引擎:基于Druid组件进行数据统计分析
一、Druid概述1、Druid简介Druid是一款基于分布式架构的OLAP引擎,支持数据写入、低延时、高性能的数据分析,具有优秀的数据聚合能力与实时查询能力。在大数据分析、实时计算、...【详细内容】
2021-04-06  Search: OLAP引擎  点击:(349)  评论:(0)  加入收藏
主流开源的OLAP引擎详细对比介绍
本文主要介绍了主流开源的OLAP引擎:Hive、Sparksql、Presto、Kylin、Impala、Druid、Clickhouse 等,逐一介绍了每一款开源 OLAP 引擎,包含架构、优缺点、使用场景等,希望可以给...【详细内容】
2020-08-18  Search: OLAP引擎  点击:(120)  评论:(0)  加入收藏
▌简易百科推荐
即将过时的 5 种软件开发技能!
作者 | Eran Yahav编译 | 言征出品 | 51CTO技术栈(微信号:blog51cto) 时至今日,AI编码工具已经进化到足够强大了吗?这未必好回答,但从2023 年 Stack Overflow 上的调查数据来看,44%...【详细内容】
2024-04-03    51CTO  Tags:软件开发   点击:(5)  评论:(0)  加入收藏
跳转链接代码怎么写?
在网页开发中,跳转链接是一项常见的功能。然而,对于非技术人员来说,编写跳转链接代码可能会显得有些困难。不用担心!我们可以借助外链平台来简化操作,即使没有编程经验,也能轻松实...【详细内容】
2024-03-27  蓝色天纪    Tags:跳转链接   点击:(12)  评论:(0)  加入收藏
中台亡了,问题到底出在哪里?
曾几何时,中台一度被当做“变革灵药”,嫁接在“前台作战单元”和“后台资源部门”之间,实现企业各业务线的“打通”和全域业务能力集成,提高开发和服务效率。但在中台如火如荼之...【详细内容】
2024-03-27  dbaplus社群    Tags:中台   点击:(8)  评论:(0)  加入收藏
员工写了个比删库更可怕的Bug!
想必大家都听说过删库跑路吧,我之前一直把它当一个段子来看。可万万没想到,就在昨天,我们公司的某位员工,竟然写了一个比删库更可怕的 Bug!给大家分享一下(不是公开处刑),希望朋友们...【详细内容】
2024-03-26  dbaplus社群    Tags:Bug   点击:(5)  评论:(0)  加入收藏
我们一起聊聊什么是正向代理和反向代理
从字面意思上看,代理就是代替处理的意思,一个对象有能力代替另一个对象处理某一件事。代理,这个词在我们的日常生活中也不陌生,比如在购物、旅游等场景中,我们经常会委托别人代替...【详细内容】
2024-03-26  萤火架构  微信公众号  Tags:正向代理   点击:(10)  评论:(0)  加入收藏
看一遍就理解:IO模型详解
前言大家好,我是程序员田螺。今天我们一起来学习IO模型。在本文开始前呢,先问问大家几个问题哈~什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll...【详细内容】
2024-03-26  捡田螺的小男孩  微信公众号  Tags:IO模型   点击:(8)  评论:(0)  加入收藏
为什么都说 HashMap 是线程不安全的?
做Java开发的人,应该都用过 HashMap 这种集合。今天就和大家来聊聊,为什么 HashMap 是线程不安全的。1.HashMap 数据结构简单来说,HashMap 基于哈希表实现。它使用键的哈希码来...【详细内容】
2024-03-22  Java技术指北  微信公众号  Tags:HashMap   点击:(11)  评论:(0)  加入收藏
如何从头开始编写LoRA代码,这有一份教程
选自 lightning.ai作者:Sebastian Raschka机器之心编译编辑:陈萍作者表示:在各种有效的 LLM 微调方法中,LoRA 仍然是他的首选。LoRA(Low-Rank Adaptation)作为一种用于微调 LLM(大...【详细内容】
2024-03-21  机器之心Pro    Tags:LoRA   点击:(12)  评论:(0)  加入收藏
这样搭建日志中心,传统的ELK就扔了吧!
最近客户有个新需求,就是想查看网站的访问情况。由于网站没有做google的统计和百度的统计,所以访问情况,只能通过日志查看,通过脚本的形式给客户导出也不太实际,给客户写个简单的...【详细内容】
2024-03-20  dbaplus社群    Tags:日志   点击:(4)  评论:(0)  加入收藏
Kubernetes 究竟有没有 LTS?
从一个有趣的问题引出很多人都在关注的 Kubernetes LTS 的问题。有趣的问题2019 年,一个名为 apiserver LoopbackClient Server cert expired after 1 year[1] 的 issue 中提...【详细内容】
2024-03-15  云原生散修  微信公众号  Tags:Kubernetes   点击:(6)  评论:(0)  加入收藏
站内最新
站内热门
站内头条