【AICon】探索八个行业创新案例,教你在教育、金融、医疗、法律等领域实践大模型技术! >>> 了解详情
写点什么

SQL 引擎年度总结

  • 2017-03-26
  • 本文字数:5473 字

    阅读完需:约 18 分钟

作为对机器学习和深度学习的年终回顾的补充,本文提供了对 SQL 引擎的调查。根据 O’Reilly 2016 年数据科学薪资调查显示,SQL 是数据科学领域使用最广泛的语言。大部分项目都需要一些 SQL 操作,甚至有一些只需要 SQL。

本文涵盖了 6 个开源领导者:Hive、Impala、Spark SQL、Drill、HAWQ 以及 Presto,还加上 Calcite、Kylin、Phoenix、Tajo 和 Trafodion。以及 2 个商业化选择 Oracle Big Data SQL IBM Big SQL ,IBM 尚未将后者更名为“Watson SQL”。

(有读者问: Druid 呢?我的回答是:检查后,我同意 Druid 属于这一类别。)

使用 SQL 引擎一词是有点随意的。例如 Hive 不是一个引擎,它的框架使用 MapReduce、TeZ 或者 Spark 引擎去执行查询,而且它并不运行 SQL,而是 HiveQL,一种类似 SQL 的语言,非常接近 SQL。“SQL-in-Hadoop” 也不适用,虽然 Hive 和 Impala 主要使用 Hadoop,但是 Spark、Drill、HAWQ 和 Presto 还可以和各种其他的数据存储系统配合使用。

不像关系型数据库,SQL 引擎独立于数据存储系统。相对而言,关系型数据库将查询引擎和存储绑定到一个单独的紧耦合系统中,这允许某些类型的优化。另一方面,拆分它们,提供了更大的灵活性,尽管存在潜在的性能损失。

下面的图 1 展示了主要的 SQL 引擎的流行程度,数据由奥地利咨询公司 Solid IT 维护的 DB-Engines 提供。DB-Engines 每月为超过 200 个数据库系统计算流行得分。得分反应了搜索引擎的查询,在线讨论的提及,提供的工作,专业资历的提及,以及 tweets。

来源:DB-Engines,2017 年 1 月 http://db-engines.com/en/ranking

虽然 Impala、Spark SQL、Drill、Hawq 和 Presto 一直在运行性能、并发量和吞吐量上击败 Hive,但是 Hive 仍然是最流行的(至少根据 DB-Engines 的标准)。原因有 3 个:

  • Hive 是 Hadoop 的默认 SQL 选项,每个版本都支持。而其他的要求特定的供应商和合适的用户;
  • Hive 已经在减少和其他引擎的性能差距。大多数 Hive 的替代者在 2012 年推出,分析师等待 Hive 查询的完成等到要自杀。然而当 Impala、Spark、Drill 等大步发展的时候,Hive 只是一直跟着,慢慢改进。现在,虽然 Hive 不是最快的选择,但是它比五年前要好得多;
  • 虽然前沿的速度很酷,但是大多数机构都知道世界并没有尽头。即使一个年轻的市场经理需要等待 10 秒钟来查明上周二 Duxbury 餐厅的鸡翅膀的销量是否超过了牛肉汉堡。

在下面的图 2 中可以看出,相对于领先的商业数据仓库应用,用户对顶尖的 SQL 引擎更感兴趣。

来源:DB-Engines,2017 年 1 月 http://db-engines.com/en/ranking

对于开源项目来说,最佳的健康度量是它的活跃开发者社区的大小。如下面的图 3 所示,Hive 和 Presto 有最大的贡献者基础。(Spark SQL 的数据暂缺)

来源:Open Hub https://www.openhub.net/

在 2016 年, Cloudera Hortonworks Kognitio Teradata 陷入了 Tony Baer 总结的基准测试之战,令人震惊的是,供应商偏爱的SQL 引擎在每一个研究中都击败了其他选择,这带来一个问题:基准测试还有意义吗?

AtScale 一年两次的基准测试并不是毫无根据的。作为一个BI 初创公司,AtScale 销售衔接BI 前端和SQL 后端的软件。公司的软件是引擎中立的,它尝试尽可能多的兼容,其在BI 领域的广泛经验让这些测试有了实际的意义。

AtScale 最近的关键发现,包括了 Hive、Impala、Spark SQL 和 Presto:

  • 4 个引擎都成功运行了 AtScale 的 BI 基准查询;
  • 取决于数据量、查询复杂度和并发用户数,每个引擎都有自己的性能优势:
    • Impala 和 Spark SQL 在小数据量的查询上击败了其他人;
    • Impala 和 Spark SQL 在大数据量的复杂 join 上击败了其他人;
    • Impala 和 Presto 在并发测试上表现的更好。
  • 对比 6 个月之前的基准测试,所有的引擎都有了 2-4 倍的性能提升。

Alex Woodie 报告了测试结果,Andrew Oliver 对其进行分析

让我们来深入了解这些项目。

Apache Hive

Apache Hive 是 Hadoop 生态系统中的第一个 SQL 框架。Facebook 的工程师在 2007 年介绍了 Hive,并在 2008 年将代码捐献给Apache 软件基金会。2010 年9 月,Hive 毕业成为Apache 顶级项目。Hadoop 生态系统中的每个主要参与者都发布和支持Hive,包括Cloudera、MapR、Hortonworks 和IBM。Amazon Web Services 在Elastic MapReduce(EMR)中提供了Hive 的修改版作为云服务。

早期发布的Hive 使用MapReduce 运行查询。复杂查询需要多次传递数据,这会降低性能。所以Hive 不适合交互式分析。由Hortonworks 领导的 Stinger 明显的提高了 Hive 的性能,尤其是通过使用 Apache Tez ,一个精简 MapReduce 代码的应用框架。Tez 和 ORCfile,一种新的存储格式,对 Hive 的查询产生了明显的提速

Cloudera 实验室带领一个并行项目重新设计Hive 的后端,使其运行在Apache Spark 上。经过长期测试后,Cloudera 在2016 年初发布了Hive-on-Spark 的正式版本。

在2016 年,Hive 有100 多人的贡献者。该团队在2 月份发布了Hive 2.0,并在6 月份发布了Hive 2.1。Hive 2.0 的改进包括了对Hive-on-Spark 的多个改进,以及性能、可用性、可支持性和稳定性增强。Hive 2.1 包括了Hive LLAP(”Live Long and Process“),它结合持久化的查询服务器和优化后的内存缓存,来实现高性能。该团队声称提高了25 倍。

9 月,Hivemall 项目进入了Apache 孵化器,正如我在我的机器学习年度总结的第二部分中指出的。 Hivemall 最初由 Treasure Data 开发并捐献给 Apache 软件基金会,它是一个可扩展的机器学习库,通过一系列的 Hive UDF 来实现,设计用于在 Hive、Pig 和 Spark SQL 上运行 MapReduce。该团队计划在 2017 年第一季度发布了第一个版本。

Apache Impala

2012 年,Cloudera 推出了 Impala ,一个开源的 MPP SQL 引擎,作为 Hive 的高性能替代品。Impala 使用 HDFS 和 HBase,并利用了 Hive 元数据。但是,它绕开了使用 MapReduce 运行查询。

Cloudera 的首席战略官 Mike Olson 在 2013 年底说到 Hive 的架构是有根本缺陷的。在他看来,开发者只能用一种全新的方式来实现高性能 SQL,例如 Impala。2014 年的 1 月 5 月 9 月,Cloudera 发布了一系列的基准测试。在这些测试中,Impala 展示了其在查询运行的逐步改进,并且显著优于基于 Tez 的 Hive、Spark SQL 和 Presto。除了运行快速,Impala 在并发行、吞吐量和可扩展性上也表现优秀。

2015 年,Cloudera 将 Impala 捐献给 Apache 软件基金会,进入了 Apache 孵化计划。Cloudera、MapR、Oracle 和 Amazon Web Services 分发 Impala,Cloudera、MapR 和 Oracle 提供了商业构建和安装支持。

2016 年,Impala 在 Apache 孵化器中取得了稳步发展。该团队清理了代码,将其迁移到Apache 基础架构,并在10 月份发布了第一个Apache 版本2.7.0。新版本包括了性能提升和可扩展性改进,以及一些其他小的增强。

9 月,Cloudera 发布了一项研究结果,该研究比较了Impala 和Amazon Web Services 的Redshift 列存储数据库。报告读起来很有意思,虽然主题一贯的需要注意供应商的基准测试。

Spark SQL

Spark SQL 是 Spark 用于结构化数据处理的组件。Apache Spark 团队 在 2014 年发布了Spark SQL,并吸收了一个叫 Shark 的早期的 Hive-on-Spark 项目。它迅速成为最广泛使用的Spark 模块。

Spark SQL 用户可以运行 SQL 查询,从 Hive 中读取数据,或者使用它来创建 Spark Dataset 和 DataFrame(Dataset 是分布式的数据集合,DataFrame 是统一命名的 Dataset 列)。Spark SQL 的接口向 Spark 提供了数据结构和执行操作的信息,Spark 的 Catalyst 优化器使用这些信息来构造一个高效的查询。

2015 年,Spark 的机器学习开发人员引入了 ML API,一个利用 Spark DataFrame 代替低级别 Spark RDD API 的包。这种方法被证明是有吸引力和富有成果的;2016 年,随着 2.0 的发布,Spark 团队将基于 RDD 的 API 改为维护模式。DataFrame API 现在是 Spark 机器学习的主要接口。

此外,在 2016 年,该团队还在 Spark 2.1.0 的 Alpha 版本中发布了结构化的流式处理。结构化的流式处理是构建在Spark SQL 上的一个流处理引擎。用户可以像对待静态源一样,用同样的方式查询流式数据源,并且可以在单个查询中组合流式和静态源。Spark SQL 持续运行查询,并且在流式数据到达的时候更新结果。结构化的流通过检查点和预写日志来提供一次性的容错保障。

Apache Drill

2012 年,由 Hadoop 分销商的领导者之一 MapR 领导的一个团队,提出构建一个Google Dremel 的开源版本,一个交互式的分布式热点分析系统。他们将其命名为 Apache Drill 。Drill 在 Apache 孵化器中被冷落了两年多,最终在 2014 年底毕业。该团队在2015 年发布了1.0。

MapR 分发和支持 Apache Drill。

2016 年,超过 50 个人对 Drill 做出了贡献。该团队在 2016 年发布了 5 个小版本,关键的增强功能包括:

  • Web 认证
  • 支持 Apache Kudu 列数据库
  • 支持 HBase 1.x
  • 动态 UDF 支持

2015 年,两位关键的 Drill 贡献者离开了MapR,并启动了 Dremio ,该项目尚未发布。

Apache HAWQ

Pivotal 软件在 2012 年推出了一款商业许可的高性能 SQL 引擎 HAWQ ,并在尝试市场营销时取得了小小的成功。改变战略后,Pivotal 在2015 年6 月将项目捐献给了Apache,并于2015 年9 月进入了Apache 孵化器程序。

15 个月之后,HAWQ 仍然待在孵化器中。2016 年 12 月,该团队发布了 HAWQ 2.0.0.0,加入了一些错误修复。我猜它会在 2017 年毕业。

对 HAWQ 喜爱的一个小点是它支持 Apache MADlib,一个同样在孵化器中的 SQL 机器学习项目。HAWQ 和 MADlib 的组合,应该是对购买了 Greenplum 并且想知道发生了什么的人们的一个很好的安慰。

Presto

Facebook 工程师在 2012 年发起 Presto 项目,作为 Hive 的一个快速交互的取代。在 2013 年推出时,成功的支持了超过 1000 个 Facebook 用户和每天超过 30000 个 PB 级数据的查询。2013 年 Facebook 开源了Presto。

Presto 支持多种数据源的 ANSI SQL 查询,包括 Hive、Cassandra、关系型数据库和专有文件系统(例如 Amazon Web Service 的 S3)。Presto 的查询可以联合多个数据源。用户可以通过 C、Java、Node.js、PHP、Python、R 和 Ruby 来提交查询。

Airpal 是 Airbnb 开发的一个基于 web 的查询工具,让用户可以通过浏览器来提交查询到 Presto。 Qubole 位 Presto 提供了管理服务。AWS 在EMR 上提供 Presto 服务。

2015 年 6 月,Teradata 宣布计划开发和支持该项目。根据宣布的三阶段计划,Teredata 提出将Presto 集成导Hadoop 生态系统中,能够在YARN 中进行操作,并且通过ODBC 和JDBC 增强连接性。Teredata 提供了自己的Presto 发行版,附带一份数据表。2016 年6 月,Teradata 宣布了Information Builders、Looker、Qlik、Tableau 和ZoomData 的鉴定结果,以及正在进行中的MicroStrategy 和Microsoft Power BI。

Presto 是一个非常活跃的项目,有一个巨大的和充满活力的贡献者社区。该团队发布的速度比 Miki Sudo 吃热狗的速度还要快–我统计了下,2016 年共发布了 42 个版本。Teradata 并没有打算总结有什么新的东西,我也不打算在 42 个发行说明里去筛选,所以就让我们说它更好吧。

其他 Apache 项目

这里还有 5 个其他的 Apache 生态系统的 SQL 混合项目。

Apache Calcite

Apache Calcite 是一个开源的数据库构建框架。它包括:

  • SQL 解析器、验证器和 JDBC 驱动
  • 查询优化工具,包括关系代数 API,基于规则的计划器和基于成本的查询优化器

Apache Hive 使用 Calcite 进行基于成本的查询优化,而 Apache Drill 和 Apache Kylin 使用 SQL 解析器。

Calcite 团队在 2016 年推出了 5 个版本包括bug 修复和用于Cassandra、Druid 和Elasticsearch 的新适配器。

Apache Kylin

Apache Kylin 是一个具有 SQL 接口的 OLAP 引擎。由 eBay 开发并捐献给 Apache,Kylin 在 2015 年毕业成为顶级项目。

2016 年成立的创业公司Kyligence 提供商业支持和一个叫做KAP 的数据仓库产品,虽然在Crunchbase 上没有列出它的资金情况,有消息来源称它有一个强大的背景,并且在上海有个大办公室。

Apache Phoenix

Apache Phoenix 是一个运行在 HBase 上的 SQL 框架,绕过了 MapReduce。Salesforce 开发了该软件并在 2013 年捐献给了Apache。2014 年5 月项目毕业成为顶级项目。Hortonworks 的Hortonworks 数据平台中包含该项目。自从领先的SQL 引擎都适配HBase 之后,我不清楚为什么我们还需要Phoenix。

Apache Tajo

Apache Tajo Gruter 在 2011 年推出的一个快速 SQL 数据仓库框架,一个大数据基础设施公司,并在 2013 年捐献给Apache。2014 年Tajo 毕业成为顶级项目。在作为Gruter 主要市场的韩国之外,该项目很少吸引到预期用户和贡献者的兴趣。除了Gartner 的Nick Heudecker 曾提过,该项目不在任何人的工作台上。

Apache Trafodion

Apache Trafodion 是另一个 SQL-on-HBase 项目,由 HP 实验室构思,它告诉你几乎所有你需要知道的。2014 年 6 月 HP 发布 Trafodion,一个月之后,Apache Phoenix 毕业投产。6 个月之后,HP 的高管们认为相对于另一款 SQL-on-HBase 引擎,它的商业潜力有限,所以他们将项目捐献给了 Apache,项目于 2015 年 5 月进入孵化器。

如果孵化结束,Trafodion 承诺成为一个事务数据库。不幸的是,这个领域有大量的选择,而开发团队唯一的竞争优势似乎是“它是开源的,所以它很便宜”。

点击查看原文链接


感谢杜小芳对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017-03-26 17:435838

评论

发布
暂无评论
发现更多内容

2021年秋季明道云伙伴大会,邀您参与!

明道云

Prometheus 内置函数(三)

耳东@Erdong

Prometheus PromQL 内置函数 10月月更

双十一即将到来,你的网站真的准备好了吗?

阿里巴巴云原生

阿里云 产品 云原生 云拨测

收藏这36个正则表达式,开发效率提高80%

Tom弹架构

Java 正则表达式

【KubeMeet 上海站回顾】 探索云原生应用管理与交付新解法

阿里巴巴云原生

阿里云 开源 云原生 KubeMeet

电商系统微服务系统设计

Imaginary

(module6)电商微服务系统拆分

消失的子弹

0 基础架构入门 - 6(电商系统微服务架构)

felix

架构实战营 0 基础架构入门

基于 RocketMQ 的基金数字化陪伴体系的架构实践

阿里巴巴云原生

阿里云 RocketMQ 云原生 消息队列 金融场景

架构实战营模块六作业 - 拆分电商系统为微服务

李焕之

学生管理系统架构设计

孙志强

架构实战营

IM场景的移动端UI自动化测试平台实践

轻口味

android 自动化测试平台 10月月更

架构实战训练营模块 6 作业

Sonichen

极客时间架构实战营作业六

jjn0703

架构实战营

vivo AI 计算平台的 ACK 混合云实践

阿里巴巴云原生

阿里云 云原生 ACK Vivo

拆分电商系统为微服务

Yina🌝很浪🌊

设计产品的十大可用性原则

石云升

产品经理 产品设计 产品思维 职场经验 10月月更

架构实战营模块一作业

孙志强

架构实战营

设计电商秒杀系统

tjudream

毕业总结

Felix

1024:SQL注入

Changing Lin

10月月更

电商系统微服务拆分

Sky

「架构实战营」

极客时间【架构实战营】第二期 模块六作业

Geek_91606e

架构实战营

模块一作业

小鹿

模块一:为何架构设计能力难以提升? --学习总结

小鹿

电商系统微服务拆分

Geek_db27b5

go-zero 实战之 blog 系统

万俊峰Kevin

golang 微服务 go-zero

Vue进阶(幺伍零):巧用 key 提升页面渲染性能及触发生命周期函数

No Silver Bullet

Vue 渲染性能 10月月更

是极客,也是大娱乐家! 爱奇艺首届“黑客马拉松”见证“娱乐,未来已来”

爱奇艺技术产品团队

电商系统微服务拆分设计

guangbao

架构训练营总结

tjudream

SQL 引擎年度总结_语言 & 开发_Thomas W. Dinsmore_InfoQ精选文章