皇上,还记得我吗?我就是1999年那个Linux伊甸园啊-----24小时滚动更新开源资讯,全年无休!

SQL 引擎年度总结

作者 Thomas W. Dinsmore ,译者 覃璐

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

本文涵盖了 6 个开源领导者:Hive、Impala、Spark SQL、Drill、HAWQ 以及 Presto,还加上 Calcite、Kylin、Phoenix、Tajo 和 Trafodion。以及 2 个商业化选择 Oracle Big Data SQLIBM 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 年, ClouderaHortonworksKognitioTeradata 陷入了 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 TajoGruter 在 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 承诺成为一个事务数据库。不幸的是,这个领域有大量的选择,而开发团队唯一的竞争优势似乎是“它是开源的,所以它很便宜”。

转自 http://www.infoq.com/cn/articles/the-year-in-sql-engines

分享到:更多 ()