OLAP开源引擎对比之历史概述

这篇具有很好参考价值的文章主要介绍了OLAP开源引擎对比之历史概述。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

OLAP开源引擎对比之历史概述

前言

OLAP概念诞生于1993年,工具则出现在更早以前,有史可查的第一款OLAP工具是1975年问世的Express,后来走进千家万户的Excel也可归为此类,所以虽然很多数据人可能没听过OLAP,但完全没打过交道的应该很少。

这个概念主要是在大数据圈里流传,而在大数据领域里,目前主流的OLAP开源引擎都诞生于2006年以后,那一年hadoop横空出世,而后大数据分析的各种方法论和引擎也随之兴起。

本系列主要介绍Hive、Spark SQL、Presto、Kylin、Impala、Druid、Clickhouse、Greenplum、StarRocks,并不代表全部,但确实是国内大数据分析领域内应用最广的几款开源引擎。

本系列将涉及历史、架构、部署运维,以及优化器、物化视图等多个宏观和微观维度,希望能帮助大家对OLAP引擎建立比较直观的了解。

开篇先讲一讲历史。

Hive

讲Hive的历史之前,简单说一下为什么要谈历史。历史的一个重要特征是局限性,就软件技术而言,回归到过去的软硬件环境,理解当时存在的局限性,才更能理解一款代时代产品的意义。

Hive由facebook开发于2007年,其历史背景是,2006年开源的hadoop虽然强大,但并不好用,作为核心组件之一的Mapreduce是一个编程框架,数据分析师需要写java代码才能实现查询需求,相比于能够轻松上手的SQL,这种模式将很多人拦在了门外。

facebook开发Hive的初衷,正是为了应对这一问题,希望能让非专业人士也能轻松地查询和分析存储在Hadoop集群中的海量数据。

不考虑工程复杂性,拿到这个需求后你的开发思路是怎样的?会不会想着写一套转译工具,将容易上手的SQL翻译成有一定门槛的Mapreduce代码,然后下发给hadoop集群去执行?

大体上,初期的Hive也确实是这么干的,其支持的HiveSQL跟大家所熟悉的SQL很像,编译器本质上干的就是翻译的活儿。

后来Spark问世,Hive开始支持Spark作为计算引擎,性质也是一回事,就是将HiveSQL翻译成Spark计算程序,扔给Spark去执行。

不同于Mapreduce直接基于原始数据进行计算,Hive在实际使用中是有建表环节的,从原始数据提取、转换结构化数据到表中,后续的查询也基于表内数据来计算,而表本身也存储于hdfs。

Spark SQL

Spark于2009年诞生于伯克利大学AMPLab,开源于2010年。如果说Hive首先要解决的是Mapreduce的易用性问题,那么Spark的第一优先目标是解决Mapreduce性能不给力的问题。

在Mapreduce诞生的时候,内存还比较昂贵,这决定了Mapreduce在设计上非常注重对内存的节省,多任务串联时,中间结果会进行落盘,结果就是导致大量的I/O操作,性能受到严重制约。

具体来看,设想一个查询涉及到两个Mapreduce任务,即job1、job2,其中job2的输入依赖于job1的输出,在运行中,job1的输出会先持久化到硬盘中,轮到job2执行时,则需要重新从硬盘中读取job1的输出结果。 不难想到,如果job1的输出结果并不落盘,只保留在内存中,而job2直接从内存中读取job1的输出结果进行计算,整个过程显然会高效得多。

Spark 的 DAG 和 RDD 即很好地实现了这一点,DAG 记录了 Job 的 Stage 以及在 Job 的执行过程中父 RDD 和子 RDD 之间的依赖关系,中间结果能够以 RDD 的形式存放在内存中,并且能够从 DAG 中恢复,从而大大减少了磁盘 I/O。

当然,DAG 和 RDD 的原理和意义远不止于此,减少的不仅是落盘,还包括shuffle,这里不展开讨论。

如今的Spark已拥有一系列高级工具,包括Spark SQL、MLlib、GraphX和Spark Streaming,不能完全以性能来概括其优势,但其早期崛起,凭借的确实是远胜于Mapreduce的优异性能。

说回到Spark SQL,前身Shark是Spark0.x版的时候推出的一套工具,底层使用Spark的基于内存的计算模型,性能上比Hive提升了很多倍,在Spark 1.x时Shark被淘汰,后来重点就放到了 Spark SQL 上。

Spark SQL的源码就在Spark内,与Spark Core无缝集成,是Spark程序优化、执行的核心组件,在使用上你可以将它对比Hive来理解,本质上是将SQL编译成Spark程序去执行,另外Spark SQL在设计时就考虑到了与Hive的兼容性,支持Hive的很多特性。

Presto

Presto也是由facebook开发并开源,问世时间为2012年,即Hive问世的5年后、Spark开源的2年后。

跟Spark一样,Presto的出现也是为了解决Mapreduce存在的性能问题,早期facebook依赖Hive做数据分析,前面提过,Hive底层依赖MapReduce,而MapReduce由于大量的I/O操作导致性能受到制约,据说facebook也曾调研过其它引擎,但鉴于facebook的数据规模和复杂场景,并没有找到合意的,所以索性重新造了轮子。

Presto和Spark SQL都是MPP架构,都是基于内存计算,不过Presto是纯粹的查询引擎,没有自己的存储,当出现内存不足时Spark会落地到磁盘,Presto则可能导致内存溢出。

Presto最初是为hadoop开发的,但后来支持的数据源不断增加,早就不限于hadoop生态,用户可以使用熟悉的SQL语法查询Hive、Cassandra、PostgreSQL、Kafka、MySQL、ElasticSearch 等数据,统一查询也成为Presto的重要特性。

Kylin

Kylin由eBay中国团队于2013年开始开发,2014年上线,并于同年开源,是国人主导的一款重量级OLAP引擎。

前面提到的Hive、Spark SQL、Presto都属于ROLAP,Kylin则是一款MOLAP产品,基本原理是对数据模型做Cube预计算,并利用计算的结果加速查询。

使用时,需要提前从Hadoop、Hive、Kafka、RDBMS等数据源抽取数据,并构建Cube,数据以关系表的形式输入,且必须符合星形模型或雪花模型,用户可以选择使用MapReduce或Spark进行构建,构建后的Cube保存在存储引擎中,默认的存储引擎为HBase。

由于连接、聚合等复杂计算在离线的预计算过程中就已经完成,查询时刻所需的计算量相应大幅减少,响应速度则大幅提升,在超大数据集上也能实现亚秒级响应。

从性能来说,Kylin这种以时间换空间带来的响应速度提升是突破性的,前面提到的Hive的分钟级的,Spark SQL和Presto是秒级,亚秒级的Kylin对于交互查询体验的提升效果显而易见。

2015年,Kylin成为Apache顶级项目,这也是首个由国内团队完整贡献到Apache的顶级项目。直到现在,Kylin仍然是最具代表性的MOLAP引擎。

Impala

Impala由Cloudera公司主导开发,2012年首次发布,2015年捐献给Apache基金会,2017年成为Apache顶级项目。

从时间来看,Impala与Presto几乎同时出现,面对的历史背景也是Hive性能不够给力,其目标即是成为Hive的高性能替代方案。

Impala的设计思路受谷歌于2010年发布的论文Dremel启发,最开始时Cloudera甚至直接宣称Impala是Dremel开源实现版本。

根据Dremel的设想,可以让计算节点和存储节点放在同一台Server上;进程常驻,做好缓存,确保不会用大量时间做冷启动;树状架构,多层聚合,这样可以让单个节点响应时间和计算量都较小,能够快速拿到返回结果……这些思路深刻影响了Impala的架构。

Impala是构建在hadoop上的查询工具,作为SQL on Hadoop计算引擎,从客户端使用来看 Impala 与 Hive 有很多的共同之处,如数据表元数据、 ODBC/JDBC 驱动、 SQL 语法、灵活的文件格式、存储资源池等。

但与Hive不同的是,Impala把整个查询分成一执行计划树,而不是一连串的 MapReduce 任务,在分发执行计划后, Impala 使用拉式获取数据的方式获取结果,把结果数据组成按执行树流式传递汇集,减少了把中间结果落盘的开销。

另外,Impala 使用服务的方式避免每次执行查询都需要启动的开销,即相比 Hive 没了 MapReduce 启动时间。

Impala可以分析存储在HDFS和HBase中的数据,并直接重用Hive的元数据服务。与传统MPP系统不太相同的地方在于,Impala实现了计算引擎与存储引擎的分离,数据的计算与文件存储系统并不是强耦合关系。

从性能上来说,Impala与Presto是同一量级,但并不具备Presto那种多数据源联邦查询特性,在国内的应用也远没有Presto广泛。

Druid

Druid由美国广告技术公司MetaMarkets 2011 年创建,后来被LinkedIn收购,并于2012年开源。

前面提到的几款引擎最初针对的都是离线场景,Presto、Impala这样的查询引擎搭配后来出现的一些如Iceberg之类的湖组件,倒是可以搭建分钟级更新的实时分析系统,但在Druid问世的时候,实时分析还并不成熟。

而Druid的一个重要优势,即是能够对实时数据进行快速处理和分析,其数据处理层包括了实时数据流和离线数据流两种方式,其中,实时数据流采用的是流处理引擎,如Storm和Spark,可以实时地采集和处理数据,并将数据置入Druid数据存储层。

Druid一般被归为MOLAP类别,在数据入库时就提前进行了聚合,也就是所谓的预聚合。MOLAP引擎在性能上是有天然优势的,Druid在大数据量下的交互查询响应速度跟Kylin是同一量级,都是亚秒级的。

Clickhouse

ClickHouse由俄罗斯的Yandex于2016年开源,应该是国内前两年人气最高的OLAP组件,没有之一。

ClickHouse最大的优势就是快,在其问世的时候,性能基本没有对手,部分场景下响应速度是Presto的10倍以上。至于其为什么这么快,其中一个重要因素是近几年几乎成为OLAP标配的向量化执行引擎。

相比于传统火山模型中的逐行处理模式,向量化执行引擎采用批量处理模式,可以大幅减少函数调用开销,降低指令、数据的 Cache Miss,提升 CPU 利用效率,并且ClickHouse 可利用 SIMD 指令进一步加速执行效率,这一技术的应用从当时来看具有明显的领先性。

除了向量化执行,ClickHouse还拥有其它很多能够有效提升性能的设计,比如,支持丰富的索引,从而在查询时尽可能的裁剪不必要的记录读取;支持一定的MOLAP能力,通过预计算提前生成聚合后的结果数据,降低查询读取的数据量。

总体上,ClickHouse将OLAP的性能拉到了一个新的高度。而得益于其出色的性能表现,它也大量被用在实时分析场景下。

与此同时,ClickHouse也有一些显而易见的缺陷,其中最难忍的是面对join查询时的无力,这也导致其覆盖的需求场景受到了很大局限。

Greenplum

Greenplum一款基于postgresql的MPP架构分布式数据库,于2008年正式发布,2010年,Greenplum的创始团队被存储领域巨头EMC公司收购,2014年,Greenplum数据库从EMC公司独立出来,成为Pivotal公司的产品,2015年10月,Pivotal公司正式将Greenplum开源。

虽然Greenplum作为产品出现是在2008年,但作为公司的Greenplum则是在2003年成立的,彼时,hadoop还未问世,企业面对数据暴增时的通常做法是往主机里加cpu、内存、硬盘,这就是所谓的Scale-up(纵向扩展)模式,而在海量数据面前,这种模式越来越难以为继。

从现在的视角来看,采用Scale-out(横向扩展)模式加机器显然更加靠谱,但当时还缺少基于集群的OLAP工具,而Greenplum正是在这一背景下开始开发的。

借助于分布式计算思想,Greenplum实现了基于数据库的分布式数据存储和并行计算,其内部有一个名为Interconnect的核心组件,在Interconnect的指挥协调下,数十个甚至数千个Sub Postgresql数据库实例可以同时开展并行计算,这些Postgresql之间采用share-nothing无共享架构,从而更将这种并行计算能力发挥到极致。

由于采用Postgresl作为底层引擎,Greenplum良好的兼容了Postgresql的功能,Postgresql中的功能模块和接口基本上99%都可以在Greenplum上使用。

StarRocks

StarRocks开源于2021年,是OLAP引擎中名副其实的后来者,但也是时下国内最热门的开源OLAP组件之一,微信、腾讯游戏、小红书、滴滴、B站、米哈游等互联网大厂已纷纷将其引入到生产环境中,甚至担任起主力引擎的重任。

在StarRocks问世时,国内的离线、实时数仓方案其实都已经比较成熟,前面提到的几款引擎基本上主导了大厂数仓建设,由于各引擎的优势各有侧重,企业往往会采用多种引擎来适应不同的需求。

StarRocks最初主要的优势是性能,当时在单表查询方面与性能标杆ClickHouse不相上下,而join优化特性使其在多表关联查询场景下的性能表现要远远优于ClickHouse,替换ClickHouse自然也就成了StarRocks的第一个目标。

而StarRocks的野心不止于此,后来又进一步发展了联邦查询功能,成为Presto的性能升级替代方案。与此同时,StarRocks优良的预计算特性让其成为Druid的一种替代选择。

StarRocks号称新一代全场景MPP数据库,客观而言,其场景适应性确实非常强,在离线、实时分析上的表现都非常突出,很多大厂都用它实现了引擎的收敛,精简了数据架构。

这两年StarRocks一直在快速迭代,去年(2023年)推出了存算分离架构,据说最高可让存储成本下降80%。作为一款由国人主导的开源工具,阿里、腾讯、滴滴等多个互联网公司已参与到共建中,未来产品形态将如何发展,拭目以待。 文章来源地址https://www.toymoban.com/news/detail-860255.html

到了这里,关于OLAP开源引擎对比之历史概述的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OLAP引擎—ClickHouse常规优化

    即便对数据一致性支持最好的 Mergetree,也只是保证 最终一致性。 ReplacingMergeTree 该引擎和 MergeTree 的不同之处在于它会删除 排序键值相同的重复项 。 数据的去重只会在数据合并期间进行。 合并会在后台一个不确定的时间进行 ,因此你无法预先作出计划。 尽管你可以调用

    2023年04月09日
    浏览(50)
  • 【大数据OLAP引擎】StarRocks为什么快?

    StarRocks最初主要的优势是性能,当时在单表查询方面与性能标杆ClickHouse不相上下,而join优化特性使其在多表关联查询场景下的性能表现要远远优于ClickHouse,替换ClickHouse自然也就成了StarRocks的第一个目标。 而StarRocks的野心不止于此,后来又进一步发展了联邦查询功能,成为

    2024年02月01日
    浏览(40)
  • 火山引擎ByteHouse:一套方案,让OLAP引擎在精准投放场景更高效

    由于流量红利逐渐消退,越来越多的广告企业和从业者开始探索精细化营销的新路径,取代以往的全流量、粗放式的广告轰炸。精细化营销意味着要在数以亿计的人群中优选出那些最具潜力的目标受众,这无疑对提供基础引擎支持的数据仓库能力,提出了极大的技术挑战。

    2024年02月12日
    浏览(37)
  • 1、前言 2、概述

    了解Git基本概念 能够概述git工作流程 能够使用Git常用命令 熟悉Git代码托管服务 能够使用 Visual Studio/Rider/VSCode 操作git linux 基本命令 编程入门基础 简单的docker 基础(会安装容器即可) 在校大学生 初入社会的开发人员     Git是目前世界上最先进的分布式版本控制系统(没有之

    2024年02月04日
    浏览(47)
  • 大数据计算分析技术:批处理、流计算、OLAP引擎

    目录 一、批处理的基石:MapReduce 1.工作流程 2.实例分析 二、流计算的代表:storm、spark streaming和flink 1.storm 2.spark streaming 3.flink  4.storm、spark streaming和flink 对比 三、OLAP引擎:Hive、Impala、Presto 1.Hive 1)Hive系统架构 2)Hive和传统数据库的区别 四 离线数据、批量计算、实时计算

    2024年02月16日
    浏览(47)
  • OLAP引擎也能实现高性能向量检索,据说QPS高于milvus!

    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 随着LLM技术应用及落地,数据库需要提高向量分析以及AI支持能力,向量数据库及向量检索等能力“异军突起”,迎来业界持续不断关注。简单来说,向量检索技术以及向量数据库能

    2024年01月16日
    浏览(54)
  • 【计算机网络】——前言计算机网络发展的历程概述

     ========================================================================= 主页点击直达: 个人主页 我的小仓库: 代码仓库 C语言偷着笑: C语言专栏 数据结构挨打小记: 初阶数据结构专栏 Linux被操作记: Linux专栏 LeetCode刷题掉发记: LeetCode刷题 算法: 算法专栏  C++头疼记: C++专栏 计算

    2024年02月08日
    浏览(55)
  • 学习Opencv(蝴蝶书/C++)——1. 前言 和 第1章.概述

    注,整体学习过程参考的内容: 从零学习 OpenCV4 2022年唐宇迪新全【OpenCV入门到实战】课程分享!原来学习OpenCV可以这么简单,超级通俗易懂!(附配套学习资料)-人工智能图像处理计算机视觉 《OpenCV轻松入门面向python》 细致理解 OpenCV opencv的全名:Open Source Computer Vision

    2024年02月03日
    浏览(52)
  • Android NFC 标签读写Demo与历史漏洞概述

    NFC 作为 Android 手机一个重要的短距特性,基本在所有 Android 中高端机型上均有支持,但说实话本人原先却很少了解和使用……为了深入探索 NFC 的安全风险,本文先来记录学习下 Android NFC 的一些基础知识、玩法、标签读写开发,并简述下业界对 NFC 特性发现的相关历史漏洞情

    2023年04月11日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包