我们正在用alluxio和prelux与alluxio对火花进行基准测试。为了评估性能,我们采用了5个不同的查询(带有一些连接,分组依据和排序),并在orc中的650GB数据集上运行。
Spark执行环境的设置使我们有一个永远运行的spark上下文,我们使用REST api(Jetty服务器)提交查询。我们没有考虑这个负载测试的第一批执行时间,因为它因为任务反序列化而花费更多时间。
我们在评估时观察到的是,当我们运行单个查询或甚至同时执行所有这5个查询时,与presto相比,spark表现得非常好,并且在一半时间内完成所有执行而不是presto。
但是对于实际负载测试,我们执行了10批(一批是同时提交的5个查询),批处理间隔为60秒。在这一点上,presto比spark更好。 Presto在约11分钟内完成所有工作,火花需要约20分钟才能完成所有任务。
我们尝试了不同的配置来改善火花并发性,例如
spark.locality.wait
和其他一些与内存相关的火花属性。 但是所有这些都导致相同的执行时间。
我们在所有工作人员上使用dstat
来查看当spark执行任务时发生了什么,我们可以看到没有或最小的IO或网络活动。 CPU总是达到95%以上(看起来像CPU一样)。 (看起来和presto几乎相似)
有人可以告诉我一些我们可以尝试获得与presto相似或更好的结果的东西吗?
并解释为什么presto在并发性方面表现优于spark?我们观察到presto的第一批比后续批次花费的时间更多。是否在内存中缓存了一些缺少火花的数据?或者presto的资源管理/执行计划比spark更好?
注意:两个群集都以相同的硬件配置运行