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 快速生成在集群上执行的高效代码。
我们已经编写了一些代码,通过使用 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 快速生成在集群上执行的高效代码。