Presto與Spark SQL查詢效能比較
阿新 • • 發佈:2019-02-05
1. 數倉環境
指標名稱 | 指標值 |
---|---|
資料總量 | 24T |
分割槽數量 | 24 |
儲存型別 | Text |
Spark SQL版本 | 2.2.0-218 |
Pres同版本 | Presto CLI 04fb3c3-dirty |
2. 分頁查詢
所有的計算時間都以秒為單位,執行的SQL語句如下:
select * from mydb where year='2018' and month='09' and day='09' and remote_addr='117.136.68.11' and host like '%poi%' limit 10;
執行環境 | limit 10 | limit 100 | limit 200 |
---|---|---|---|
Presto | 2 | 23 | 42 |
Spark SQL | 34.08 | 237.395 | 120 |
Hive | 4413 | 忽略 | 忽略 |
另外,我注意到Presto自帶分頁功能,所以在執行查詢命令時感覺更快,幾乎就是剛輸入命令,結果就呈現出來了,互動性領先。
3. 全量結果
相對於分頁查詢,這次去掉了limit限制,以及增加了計數查詢,如下:
# 測試1
select * from mydb where year='2018' and month='09' and day='09' and remote_addr='117.136.68.11' and host like '%poi%' ;
# 測試2
select count(*) from mydb where year='2018' and month='09' and day='09' and remote_addr='117.136.68.11' and host like '%poi%';
執行結果,如下表所示:
執行環境 | 全量資料 |
---|---|
Presto | 2080 |
Spark SQL | 661.493 |
4. 其他
相比於Spark SQL,Presto有著更快的啟動時間。
相比於Presto,Spark SQL更容易指定執行節點的數量,速度提升更容易,下表是Spark SQL節點數量的速度變化情況。
spark-sql --num-executors 10
節點數量 | 執行時間 |
---|---|
100 | 661.493 |
24 | 662.734 |
10 | 625.403 |
從上表可以看出,Spark SQL所需的執行節點應儘可能與分割槽數量相等(正在做進一步詳盡的測試,請稍等),再多也只是資源浪費。
跟Presto相比,Spark SQL即使在執行節點數量相等時(10個),Spark SQL的速度也大幅領先。
5. 結論
在執行分頁查詢時,Presto具有明顯的優勢,但需要全量資料與統計時,Spark SQL則將Presto遠遠甩在身後。