Mesos上的Spark比本地慢得多

时间:2016-05-24 00:09:06

标签: apache-spark spark-streaming mesos

我在带有Mesos的16 CPU的64 GB RAM主机上运行Spark Streaming进程。

当我使用Mesos作为集群管理器(通过设置--master mesos://leader.mesos:5050)运行它时,它运行速度比在本地模式(--master local[4])运行时慢得多。

我找不到原因,我也不知道。我注意到的一件事是,有一个特定任务在Mesos上花费的时间比在Local中花费的时间多得多。

奇怪的事情(也许应该是问题'标题)是任务本身需要6s而它的阶段(它只有一个阶段)需要不到一秒钟。参见附图(Mesos(1)和(2))。怎么会?不是一份等于其各部分总和的工作吗?

本地: Spark - Local

Mesos:

(1) Spark - Mesos Stages

(2) Spark - Mesos Job

另一个注意事项:我确实设法在另一个Mesos集群上运行这个完全相同的Spark Streaming进程,并且它在相当长的时间内运行,非常类似于上面描述的本地模式。我能想到的唯一区别是这个集群有多个主机,并且Spark运行时有2个执行器而不是1.(我无法找到在同一主机上运行多个执行程序的方法在Mesos上)。这可能是原因吗?

任何线索都会非常感激。

1 个答案:

答案 0 :(得分:1)

Spark可以两种模式运行Mesos:coarse-grained(默认)和fine-grained(请参阅documentation)。

coarse-grained模式下,Spark在Mesos分配给它的每台机器上只启动一个执行程序。在此任务中,Spark启动了其他小任务。它具有降低启动开销的好处(在您的情况下,您不想更改此模式)。

您能更具体地了解您的流媒体工作吗?是CPU,磁盘还是网络有限?如果运行一些Spark示例,则可以轻松地比较性能。

如果您的任务是CPU密集型的,您可以考虑设置spark.mesos.extra.cores。默认情况下,Spark会尝试获取Mesos提供的所有核心。因此,如果该群集上没有其他任务正在运行,那么这应该不是问题。