「技术选型」Spark SQL vs Presto

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 「技术选型」Spark SQL vs Presto


Spark SQL与Presto之间的区别

简单来说 Presto 就是“SQL查询引擎”,最初是为Apache Hadoop开发的。它是一个开源的分布式SQL查询引擎,用于对各种大小的数据集运行交互式分析查询。

Spark SQL是一个分布式内存中计算引擎,在结构化和半结构化数据集之上有一个SQL层。由于它是在内存中处理的,所以在Spark SQL中处理速度会很快。

Spark SQL和Presto (Infographics)的头对头比较

下面是Spark SQL和Presto之间的前7个比较:


Spark SQL和Presto之间的关键区别

下面是关于Presto和Spark SQL之间的关键区别的列表:

  • Apache Spark引入了一个用于处理结构化数据的编程模块,称为Spark SQL。Spark SQL包含一个称为数据帧的编码抽象,它可以作为分布式SQL查询引擎。
  • Presto创立的初衷是为了实现交互式分析和商业数据仓库的速度,使组织规模能够与Facebook相匹配。
  • Spark SQL是Spark Core上的一个组件,它引入了名为SchemaRDD(弹性分布式数据集)的新数据抽象,它提供了对结构化/半结构化数据的支持。
  • Presto被设计为使用MapReduce作业(如Hive或Pig)查询HDFS数据的工具的替代品,但Presto并不仅限于HDFS。
  • Spark SQL遵循内存中处理,这提高了处理速度。Spark被设计用于处理广泛的工作负载,如批处理查询、迭代算法、交互式查询、流媒体等。
  • Presto能够执行联邦查询。下面是快速联邦查询的示例

让我们假设任何RDMS 表sample1与HIVE表sample2 ,

' Testdb '是hive和MYSQL中的数据库。使用Presto,我们可以评估数据使用在一个单一的查询一旦他们的连接器配置正确,如下所示-

presto> <Function (select/Group by ..etc)> hive.Testdb.sample2

  • Spark SQL架构由Spark SQL, Schema RDD, and Data Frame组成数据帧是数据的集合;数据被组织成指定的列。从技术上讲,它与关系数据库表相同。模式RDD: Spark Core包含称为RDD的特殊数据结构。Spark SQL适用于模式、表和记录。因此,用户可以使用模式RDD作为临时表。这样用户就可以把这个模式称为数据框架
  • Data Frame 能力:数据框架在单个节点集群上处理从千字节到千兆字节的数据,
  • Data Frame支持不同的数据格式(CSV, elasticsearch, Cassandra等)和存储系统(HDFS, HIVE表,MySQL等),它可以集成与所有大数据工具/框架通过Spark-Core,并提供API的语言,如Python, Java, Scala,和R编程。
  • Presto是一个分布式引擎,可以在集群设置中工作。Presto体系结构易于理解和扩展。Presto客户端(CLI)将SQL语句提交给管理处理的主守护进程协调器。
  • 使用Presto的公司:Facebook、Netflix、Airbnd、Dropbox等。
  • Apache Spark用例可以在金融、零售、医疗保健和旅游等行业中找到。许多电子商务网站,如eBay、阿里巴巴、Pinterest都在其电子商务平台上使用Spark SQL来分析数百PB的数据。

比较Spark SQL和Presto表

下面是SQL和Presto之间最顶层的比较。

比较的基础

PrestoSpark SQL

生态系统/平台

Hadoop、大数据处理等 Spark框架、大数据处理等目的

Presto是为在大数据(巨大的工作负载)上运行SQL查询而设计的。

它是由Facebook设计来处理他们巨大的工作量。

Spark SQL是Apache Spark Core的组件之一。

Spark Core是Spark平台的基本执行引擎

安装

  • Presto是一个用于处理pet字节数据的分布式SQL查询引擎,它运行在一个集群上,就像设置了一组机器一样。
  • 完整的Presto集群设置包括一个协调器(管理节点)和多个worker。用户从客户机(即Presto CLI)向协调器提交查询。协调器解析、分析和计划查询执行,然后将查询处理分发给工作程序。
  • 如果安装并配置Apache Spark集群,则Spark SQL设置将是开箱即用的
  • Apache Spark是Hadoop的子项目。
  • Apaches Spark是一种基于集群的大数据处理技术,旨在实现快速计算。

功能/特性

Presto允许对许多数据源进行数据查询;例如,数据可能驻留在数据存储中:Hive、Cassandra、RDBMS和其他一些专有数据存储中。Spark SQL提供了使用数据框架和JDBC连接器与其他数据源集成的灵活性。

连接器

支持

Presto支持可插拔连接器。这些连接器为查询提供数据集。

下面是presto中可用的几个预先存在的连接器,同时presto还提供了与定制连接器连接的能力。

下面是it支持的一些连接器

  • Hadoop/Hive
  • Cassandra
  • Teradata
  • PostgreSQL
  • Oracle etc

数据框架接口允许不同的数据源在Spark SQL上工作。

Spark SQL包括一个具有行业标准JDBC和ODBC连接的服务器模式。

联邦查询

Presto支持联邦查询。Presto可以配置连接到不同的DBs,一旦配置;它的CLI可以用来启动“联邦查询”。

在一个Presto查询中,用户可以组合来自多个数据源的数据并运行查询。

Spark SQL带有一个使用JDBC连接其他数据库的内建特性,即“JDBC到其他数据库”,它有助于联邦特性。

Spark利用scala/python API使用JDBC:数据库特性创建数据框架,但它也可以直接与Spark SQL Thrift server一起工作,并允许用户像其他hive/ Spark表一样毫不费力地查询外部JDBC表。

谁在使用

数据分析师、数据工程师、数据科学家等等数据分析师、数据工程师、数据科学家、Spark开发人员等等

结论

Spark SQL和Presto都是市场上可用的SQL分布式引擎。

Presto在处理双类型查询时非常有用,而Spark SQL在大型分析查询中的性能领先。与配置相比,Presto的设置比Spark SQL简单。Spark SQL和Presto在市场上的地位是平等的,它们解决的是不同类型的业务问题。

推荐的文章

这是Spark SQL与Presto的一个指南。在这里,我们讨论了Spark SQL与即时头对头比较、关键区别以及信息图和比较表。你也可以看看下面的文章来了解更多-

  • Apache Spark vs Apache Flink -你需要知道的8件有用的事情
  • Apache Hive vs Apache Spark SQL - 13惊人的差异
  • Hadoop和SQL之间的最佳6个比较
  • Hadoop与Teradata——有价值的区别
相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
相关文章
|
5月前
|
SQL JSON 分布式计算
Spark SQL架构及高级用法
Spark SQL基于Catalyst优化器与Tungsten引擎,提供高效的数据处理能力。其架构涵盖SQL解析、逻辑计划优化、物理计划生成及分布式执行,支持复杂数据类型、窗口函数与多样化聚合操作,结合自适应查询与代码生成技术,实现高性能大数据分析。
|
6月前
|
SQL 关系型数据库 PostgreSQL
CTE vs 子查询:深入拆解PostgreSQL复杂SQL的隐藏性能差异
本文深入探讨了PostgreSQL中CTE(公共表表达式)与子查询的选择对SQL性能的影响。通过分析两者底层机制,揭示CTE的物化特性及子查询的优化融合优势,并结合多场景案例对比执行效率。最终给出决策指南,帮助开发者根据数据量、引用次数和复杂度选择最优方案,同时提供高级优化技巧和版本演进建议,助力SQL性能调优。
574 1
|
9月前
|
SQL 分布式计算 资源调度
Dataphin功能Tips系列(48)-如何根据Hive SQL/Spark SQL的任务优先级指定YARN资源队列
如何根据Hive SQL/Spark SQL的任务优先级指定YARN资源队列
339 4
|
11月前
|
SQL 分布式计算 Java
Spark SQL向量化执行引擎框架Gluten-Velox在AArch64使能和优化
本文摘自 Arm China的工程师顾煜祺关于“在 Arm 平台上使用 Native 算子库加速 Spark”的分享,主要内容包括以下四个部分: 1.技术背景 2.算子库构成 3.算子操作优化 4.未来工作
1357 0
|
SQL JSON 分布式计算
【赵渝强老师】Spark SQL的数据模型:DataFrame
本文介绍了在Spark SQL中创建DataFrame的三种方法。首先,通过定义case class来创建表结构,然后将CSV文件读入RDD并关联Schema生成DataFrame。其次,使用StructType定义表结构,同样将CSV文件读入RDD并转换为Row对象后创建DataFrame。最后,直接加载带有格式的数据文件(如JSON),通过读取文件内容直接创建DataFrame。每种方法都包含详细的代码示例和解释。
289 0
|
SQL 分布式计算 大数据
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(一)
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(一)
283 0
|
SQL 分布式计算 算法
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(二)
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(二)
232 0
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
276 0
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
529 13