Spark执行时间与AWS EMR上的节点数量

时间:2016-11-08 15:56:37

标签: python amazon-web-services apache-spark execution-time

我是Spark的新手。我试图在Amazon EMR(Python pi近似发现HERE)上运行一个简单的应用程序,其中包含1个工作节点,在第二个阶段运行2个工作节点(m4.large)。完成任务的经过时间大约是每次25秒。天真地,我期待着2个节点的1.5倍增益。我天真吗?这是正常的吗?

2 个答案:

答案 0 :(得分:1)

这个问题相当广泛,因此我的回答也很广泛,但你会得到相应的结论。

更多的机器并不意味着总是更快的计算,特别是在Pi近似上。

您不应该忘记最终的瓶颈:网络I / O,数据偏差,昂贵的转换,分区等。

这就是为什么应该进行基准测试和监控的原因。此外,您可能正在计算Spark上下文需要设置和拆除的时间,这可能是您计算时间的一个重要部分。

另外,m4.large是一个非常强大的机器,可用于此目的。如果您在EMR集群上设置神经节,您会注意到火花几乎没有使用它的资源,这导致您在EMR上启动Spark应用程序时考虑调整。

现在回答你的问题。 是的,对于您正在启动的应用程序,这种行为是正常的。

这是我刚才写的关于 improving latency on a single node apache spark cluster的帖子,可能会为您提供有关此主题的更多信息。

答案 1 :(得分:1)

让我们做一个简单的实验:

from functools import reduce
from operator import add
import timeit

# Taken from the linked example.

n = 100000

def f(_):
    x = random() * 2 - 1
    y = random() * 2 - 1
    return 1 if x ** 2 + y ** 2 < 1 else 0

%timeit -n 100 reduce(add, (f(x) for x  in range(n)))

我使用相当旧的硬件得到的结果:

100 loops, best of 3: 132 ms per loop

这应该是单个分区的预期处理时间,我们得到的值与任务调度时间相当。

结论?您测量的是集群和应用程序延迟(上下文初始化,调度延迟,上下文拆除)而不是处理时间。