为什么Presto比Spark SQL更快

时间:2018-04-25 04:20:49

标签: apache-spark-sql presto

为什么Presto比Spark SQL更快? Presto和Spark SQL在计算架构和内存管理方面有什么区别?

3 个答案:

答案 0 :(得分:12)

一般来说,很难说Presto肯定比Spark SQL更快或更慢。这实际上取决于您正在执行的查询类型,环境和引擎调整参数。但是,我在业界看到的内容(UberNeflix示例)Presto用作ad-hock SQL分析而Spark用于ETL / ML管道。

一种可能的解释是,为Presto安排查询没有太多开销。 Presto协调器始终处于启动状态并等待查询。另一方面,Spark正在做懒惰的方法。驱动程序需要时间与集群管理器协商资源,复制jar并开始处理。

Presto架构的另一个相当简单。它有一个协调器,可以执行SQL解析,计划,调度和一组执行物理计划的工作人员。

enter image description here

另一方面,Spark核心之间有更多层。除了Presto拥有的阶段之外,Spark SQL还必须应对RDD的弹性构建,为作业进行资源管理和协商。

enter image description here

另请注意,Spark SQL具有基于成本的优化程序,可在复杂查询上表现更好。虽然Presto(0.199)有一个遗留的基于规则的优化器。 {/ 3}}将CBO带到Presto,这可能会击败Spark SQL性能。

答案 1 :(得分:6)

我认为关键的区别在于Presto的体系结构与MPP SQL引擎非常相似。这意味着仅针对SQL查询执行进行了高度优化,而Spark是一个通用执行框架,能够运行多个不同的工作负载,如ETL,机器学习等。

此外,为了实现SQL查询的较低延迟,Presto的一个权衡是不关心中间查询容错。如果其中一个Presto工作节点出现故障(例如,关闭),则大多数情况下正在进行的查询将中止并需要重新启动。另一方面,Spark支持中间查询容错并且可以从这种情况中恢复但是为了做到这一点,它需要做一些额外的簿记并且基本上"计划失败"。当您的集群没有遇到任何故障时,这种开销会导致性能降低。

答案 2 :(得分:4)

位置: Presto强调查询,但强调计算。

内存存储: 两者都是内存存储和计算,当它无法获得足够的内存时,spark会将数据写入磁盘,但presto会导致OOM。

任务,资源: spark会提交任务并在每个阶段实时应用资源(与presto相比,此策略可能导致处理速度稍慢); Presto适用于所有必需的资源并且一次提交所有任务。

数据处理: 在spark中,数据需要在进入下一阶段之前完全处理。 Presto是批处理(页面)管道处理模式。只要页面完成,就可以将其发送到下一个任务(这种方法大大减少了各种查询的端到端响应时间)。

数据容错: 如果火花失败或丢失数据,将根据亲属关系重新计算。但是presto会导致查询失败。