添加更多工作节点时出现 Spark 性能问题

Spark Performance issue while adding more worker nodes

我是 Spark 的新手。当工作节点数量增加时,我面临性能问题。因此,为了对此进行调查,我在 spark-shell.

上尝试了一些示例代码

我创建了一个带有 2 个工作节点 (m3.xlarge) 的 Amazon AWS EMR。我在主节点上的 spark-shell 上使用了以下代码。

var df = sqlContext.range(0,6000000000L).withColumn("col1",rand(10)).withColumn("col2",rand(20))
df.selectExpr("id","col1","col2","if(id%2=0,1,0) as key").groupBy("key").agg(avg("col1"),avg("col2")).show()

此代码执行时没有任何问题,耗时大约 8 分钟。但是当我再添加 2 个工作节点 (m3.xlarge) 并在主节点上使用 spark-shell 执行相同的代码时,时间增加到 10 分钟。

问题来了,我觉得时间应该减少,不是减半,而是我应该减少。我不知道为什么在增加工作节点时,相同的 spark 作业会花费更多时间。知道为什么会这样吗?我错过了什么吗?

这不应该发生,但算法在分发时可能 运行 变慢。 基本上,如果同步部分很繁重,那么使用 2 个节点执行此操作将比使用一个节点花费更多时间。 我将从比较一些更简单的转换开始,运行宁一个更异步的代码,因为没有任何同步点(如按键分组),看看你是否遇到同样的问题。

@z-star,是的,分布式算法可能会变慢。我使用 Spark Dynamic Allocation 找到了解决方案。这使 spark 仅使用必需的执行程序。而静态分配在所有执行器上运行一个作业,这会增加更多节点的执行时间。