spark SQL和presto比较
Presto比Spark SQL更快或更慢,取决于您正在执行的查询类型,环境和引擎调整参数。
相同点 | 不同点 |
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只是对特定场景会有影响,这点差异可以忽略。 |