我是 Spark 新手。我尝试在 Amazon EMR 上运行一个简单的应用程序(找到 Python pi 近似 here ),使用 1 个工作节点,并在第二阶段使用 2 个工作节点 (m4.large)。每次完成任务所用时间约为 25 秒。天真地,我期待 2 个节点能带来 1.5 倍的增益。我天真吗?正常吗?
最佳答案
让我们做一个简单的实验:
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
这应该是单个分区的预期处理时间,我们得到的值与任务调度时间相当。
结论?您测量的是集群和应用程序延迟(上下文初始化、调度延迟、上下文拆卸),而不是处理时间。
关于python - Spark 执行时间与 AWS EMR 上的节点数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40491267/