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只是對特定場景會有影響,這點差異可以忽略。 |