presto和spark的区别?
很难说Presto肯定比Spark SQL更快或更慢,取决于您正在执行的查询类型,环境和引擎调整参数。关于presto和spark sql对比的文章很少,主要原因是Presto没有那么主流,但已用了presto,那就有必要对比分析一下。
相同点
presto和spark sql都是MPP(massively parallel processing)架构(Presto/Impala/SparkSQL/Drill等),有很好的数据量和灵活性支持,都是基于内存(spark基于内存和磁盘),但是对响应时间是没有保证的。当数据量和计算复杂度增加后,响应时间会变慢,从秒级到分钟级,甚至小时级都有可能。
不同点
重点不同:presto强调查询,spark sql强调计算
架构不同:Presto架构相当简单,有一个协调器,可以执行SQL解析、计划、调度,和一组执行物理计划的工作节点;Spark核心之间有更多层,框架更复杂,RDD的弹性构建,为作业进行资源管理和协商等等
内存存储:两者都是内存计算,当内存不够时,presto直接OOM,spark会落地磁盘
资源申请:presto预先申请好CPU和内存,coordinator和worker一直运行;spark任务实时申请资源,需要多少资源申请多少
数据处理:Presto是批处理(页面)管道处理模式,只要页面完成,就可以将其发送到下一个任务(这种方法大大减少了各种查询的端到端响应时间); 在spark中,数据需要在进入下一阶段之前完全处理。
数据容错: 如果单个节点发生失败或者数据丢失,presto会导致查询失败;但spark会根据rdd血缘关系重新计算
优化程序:Presto基于成本的优化器(CBO),速度更快;Spark SQL基于规则的优化(RBO),可在复杂查询上执行更好的操作,速度更慢。但在Spark 2.2开始后的版本,也引入了基于成本的优化(CBO),而且CBO只是对特定场景会有影响,这点差异可以忽略。
区别在于设计架构、数据处理方式、数据处理速度、使用场景、编程接口等方面。详细区别如下:
1. 设计架构:Presto是一个基于SQL的分布式查询引擎,它使用自定义的计算引擎来执行查询。Spark是一个通用的大数据处理框架,它支持多种计算模型,包括批处理、实时流处理和机器学习等。
2. 数据处理方式:Presto将数据存储在外部数据源中,包括Hadoop HDFS、Amazon S3、MySQL等。Spark则使用分布式内存计算引擎来处理数据,它通常将数据存储在内存中,以提高处理速度。
3. 数据处理速度:Presto在处理大型数据集时非常快,因为它使用的是自定义计算引擎,它可以轻松地处理数十亿行数据。Spark处理速度也很快,特别是在处理内存中的数据时,但是在处理大型数据集时可能会遇到瓶颈。
4. 使用场景:Presto适用于需要快速查询大量数据的场景,特别是在需要使用多个数据源的情况下。Spark适用于需要进行复杂数据处理的场景,例如批处理、实时流处理和机器学习等。
5. 编程接口:Presto使用标准的SQL查询语言,使得用户可以轻松地编写和执行查询语句。Spark使用Scala、Java、Python等编程语言来编写应用程序,用户需要编写代码来处理数据。
总之,Presto和Spark都是强大的大数据处理框架,但是它们的设计和使用方式有很大的不同。用户应该根据自己的需求和场景来选择最合适的框架。
Presto和Spark都是大数据处理的开源框架,但是它们的设计和使用方式有很大的不同。