Presto为什么比Spark SQL快?

Presto为什么比Spark SQL快?
Spark SQL属于MMP架构的吗?

阅读 2.6k
2 个回答

Presto和Spark SQL都是大数据处理框架,它们有着不同的设计目标和实现方式,导致了它们在性能上的差异。

Presto是一种分布式SQL查询引擎,专门设计用于快速处理大量数据。Presto使用分布式架构,每个节点独立处理数据,通过分配任务和数据处理来提高性能。Presto还使用了代价模型,允许它通过评估每个查询的代价来优化查询计划。

相比之下,Spark SQL是基于Apache Spark的一个模块,它专注于执行基于Spark的大规模数据处理。Spark SQL使用的是Spark的RDD(Resilient Distributed Datasets)数据抽象,这种数据抽象允许Spark SQL在整个Spark集群中进行数据处理。然而,这种分布式架构可能会导致额外的数据传输和处理开销,从而影响性能。

总的来说,Presto的专注于快速处理大量数据和先进的优化技术可能使其比Spark SQL快。但是,Spark SQL的分布式架构和整合Spark生态系统的优势也可能使其在特定情况下更快。

最终,选择Presto还是Spark SQL取决于具体的需求和应用场景,建议根据数据量

在2020年左右,我们比较了Presto和Spark SQL的性能,并发现除了一些在Presto上出现内存不足的SQL外,其他所有的查询都是Presto执行得更快。我们认为主要有几个原因:

  1. Presto没有故障容错功能,因此如果在查询过程中出现问题,则需要重新运行该查询。Spark SQL支持一定程度的故障容错,但这是有代价的。
  2. 在计划和执行优化方面,Presto一直在进步,包括CBO,动态过滤等。Presto是最早采用字节码生成算子的,而Spark SQL后来也赶上了。如果未来大家都使用Velox的算子,这一块就跟上了。Presto的ORC reader在近几年一直被优化得很好,很多查询的谓词都可以下推到ORC reader中。这是因为Presto的主要贡献者Facebook使用ORC数据格式。但是,由于Parquet reader以前主要是Uber和Twitter贡献的,近几年明显停滞了。但是无论如何,Presto在这些方面的积累仍然很深厚,而Spark SQL也在进步,这实际上就是比拼社区的活跃度。
  3. Presto是一个长时间运行的服务,而Spark通常不会被设置为Spark as a Service。你的作业分发和启动都需要时间。对于一两秒的小query,presto的优势还是明显的。
  4. 在缓存方面,Presto更容易实现本地缓存,因为Presto Worker是长时间运行的。我们还可以通过修改Presto的调度程序来实现数据亲和性,从而提高缓存命中率。这个项目其实就是Alluxio和Facebook等厂商一起合作的RaptorX项目。我们看到了在很多dashboard query上实现了10倍性能提升。
  5. 在S3 reader方面,Presto和Trino在S3上进行了较好的优化,但我不确定Spark SQL是否已经达到了这一水平,这是一个不确定性。
内容来源:Alluxio软件工程师 王北南
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题