Spark GraphX spark-shell 与 spark-submit 性能差异

Spark GraphX spark-shell vs spark-submit performance differences

我们已经编写了一些代码,通过使用 Spark 1.6.1 和 Scala 2.10 在 Scala 中编写的 GraphX 加入和 link 数据集。

如果我们 运行 在 spark-shell 中编写此代码,它将在 30 分钟内完成,其中有 10 个执行程序、10g 内存和每个执行程序 5 cpu。

如果我们 运行 在带有 spark-submit 的 fat jar 中进行此操作,则该过程会因内存不足错误而失败,并且需要一个半小时才能到达该点。

有人知道是什么原因造成的吗?

有谁知道 shell 中的 SparkContext 和 SQLContext 是如何设置的,如果我们在设置自己的上下文时遗漏了任何可能导致 spark-submit 问题的信息 运行宁这么厉害?

应该没有区别。

检查 spark-submit 设置 - 可能其中一些不正确并且 spark-submit 执行程序或内存的数量较少。

打开Spark WebUI,检查数据是否不倾斜,所有配置是否正确

我不久前就明白了这一点,然后又遇到了我的问题。所以我的想法会随着我修复它的方式而更新。问题不是 spark-submit 和 spark-shell 之间的区别,而是我们执行的代码结构的区别。

在 Shell 中,我将代码拆分并逐行执行,这导致 Spark 生成的代码快速高效。

通过Spark Submit,我们将代码打包并滚动到类中,通过Inheritence使代码更易于共享和重用,但这导致Spark生成的代码混乱且效率低下。当我们删除大部分继承并编写更简单、更实用的代码时,性能又恢复了快速和高效。

所以这里的教训是确保你的应用程序没有过多的 OOP 并且很少的继承是可以的,但是你应该努力让你的代码尽可能简单和实用,以便于 Spark 快速生成在集群上执行的高效代码。