为什么增加Spark独立工作者的时间几乎是恒定的执行时间

时间:2018-05-21 11:32:07

标签: apache-spark pyspark

我告诉使用Spark时,建议的工作人员数量是每个核心一个。虽然工作人员的数量远远高于计算机上的核心,但我的性能并没有下降。为什么会这样?

from time import time
from pyspark import SparkContext

for j in range(1, 10):
    sc = SparkContext(master="local[%d]" % (j))
    t0 = time()
    for i in range(10):
        sc.parallelize([1, 2] * 1000000).reduce(lambda x, y: x + y)
    print("%2d executors, time=%4.3f" % (j, time() - t0))
    sc.stop()

# 1 executors time=6.112
# 2 executors time=5.202
# 3 executors time=4.695
# 4 executors time=5.090
# 5 executors time=5.262
# 6 executors time=5.156
# 7 executors time=5.274
# 8 executors time=5.376
# 9 executors time=5.124

硬件规格:

  • MacBook Pro
  • Intel Core i5,2.3Ghz
  • 核心总数2
  • L2缓存256 KB
  • L3缓存4 MB
  • 内存16 GB

1 个答案:

答案 0 :(得分:1)

你没有衡量任何有用的东西。如此少量的数据处理时间可以忽略不计:

 Cells(j + 7, 2).Value = Replace(Replace(mystring, "Nat Rep feasibility check for ", ""), " - Details by Region", "")

实际延迟几乎完全由初始化时间引起,并且在较小程度上由调度开销引起。

另外

  

使用Spark时,建议的工作人员数量为每个核心一个。

不是很正确。许多Spark作业都是IO限制的,建议使用超额订阅资源。

最大的担忧是,如果任务变得很小(比如这里),启动任务的成本大于处理成本。在实践中,您的处理器每秒都会多次切换线程 - 添加一些额外的线程只是赢得了很大的不同。