【问题标题】:Spark GraphX spark-shell vs spark-submit performance differencesSpark GraphX spark-shell 与 spark-submit 性能差异
【发布时间】:2017-10-19 21:01:49
【问题描述】:

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

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

如果我们使用 spark-submit 在一个胖 jar 中运行它,那么该过程会因内存不足错误而崩溃,并且需要一个半小时才能到达该点。

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

有人知道如何在 shell 中设置 SparkContext 和 SQLContext 吗?如果我们在设置自己的上下文时遗漏了任何可能导致 spark-submit 运行如此糟糕的问题?

【问题讨论】:

    标签: scala apache-spark spark-graphx


    【解决方案1】:

    应该没有区别。

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

    打开 Spark Web UI,检查数据是否有偏差,所有配置是否正确

    【讨论】:

    • 我们检查了它们的设置是否相同,即使我们为 spark-submit 提供的资源比 shell 多,它仍然会遇到问题。此外,如果数据有偏差,它应该会影响 shell 并以相同的方式提交?
    • @AndyLong 你能检查 Spark Web UI 中的参数值吗?
    • 可能有些设置被覆盖了,所以我想从 Web UI 中查看信息
    【解决方案2】:

    我不久前就想到了这一点,然后又碰到了我的问题。所以想法会随着我如何修复它而更新。问题不是 spark-submit 和 spark-shell 之间的差异,而是我们正在执行的代码结构的差异。

    在 Shell 中,我将代码解绑并逐行执行,这使得 Spark 生成的代码快速高效。

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

    所以这里的教训是确保你不要对你的应用程序进行太多的 OOP 并且很少继承是可以的,但是你应该努力保持你的代码尽可能简单和功能性,以使 Spark 能够轻松生成快速高效的代码在集群上执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-11
      • 1970-01-01
      • 1970-01-01
      • 2017-09-28
      • 2022-11-20
      • 2018-08-12
      • 2019-04-15
      • 1970-01-01
      相关资源
      最近更新 更多