apache-spark - 应用程序时间处理取决于计算节点的数量

标签 apache-spark

也许这个问题有点奇怪......但我会尝试问它。

我有一个 Spark 应用程序,我在不同数量的计算节点上测试它。 (我将这个计数从 1 个节点更改为 4 个节点)。

所有节点都是平等的 - 它们具有相同的 CPU 和相同大小的 RAM。

所有应用程序设置(例如并行级别或分区计数)都是恒定的。

这里是根据计算节点数量的应用时间处理结果:

1 个节点 -- 127 分钟

2 个节点 -- 71 分钟

3 个节点 -- 51 分钟

4 个节点 -- 38 分钟

结果的近似值及其随后的外推表明,随着节点数量的线性增加,处理时间呈指数减少。因此,应用程序时间处理的持续时间不会因限制内增加节点数而受到显着影响...

谁能解释一下这个事实吗?

谢谢!

最佳答案

首先,这在很大程度上取决于您的工作类型。是否受 I/O 限制?那么添加更多的CPU也没有多大帮助。添加更多节点会有所帮助,但磁盘仍然限制了作业的性能。

其次,对于您添加的每个节点,都会有开销,例如执行器和任务启动、调度等。您还可以在节点之间进行网络传输,特别是当您的作业有多个 shuffle 时。

您还可以尝试增加并行度,以便实际上可以利用更多节点和更多 CPU。但一般来说,实现 100% 并行化是很困难的,特别是在像 Spark 这样的年轻项目中。

关于apache-spark - 应用程序时间处理取决于计算节点的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29520841/

相关文章:

scala - 当对中的顺序不相关时,获取 RDD 中对的唯一值

python - Pyspark 在查找前一行时按组迭代数据帧

java - withColumn() 内的 AnalysisException callUDF()

scala - 限制数据帧分区的最大大小

apache-spark - Elasticsearch如何利用集群?

apache-spark - 使用 spark-submit YARN 集群模式时缺少 hive-site

scala - 如果一列是另一列的成员,如何过滤 Spark 数据框

azure - Azure 上的 Spark SSD

java - Spark SQLContext 找不到 Hive 表

python - PySpark:将 RDD 转换为数据框中的列