版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yiifaa/article/details/82788727
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远远甩在身后。