我们编写了一些代码,通过使用Spark 1.6.1和Scala 2.10在Scala中编写的GraphX来连接和链接数据集。
如果我们在spark-shell中运行此代码,它将在30分钟内完成10个执行器,10g内存和放大器。每个遗嘱执行人5个cpu。
如果我们在一个带有spark-submit的胖罐子里运行它,那么这个过程就会因为内存不足而错过,需要一个半小时来达到这一点。
有没有人有任何想法可能导致这个?
有没有人知道如何在shell中设置SparkContext和SQLContext,以及我们是否错过了设置我们自己的上下文的任何内容,这可能导致spark-submit运行如此严重的问题?
答案 0 :(得分:0)
应该没有区别。
检查spark-submit
设置 - 可能其中一些设置不正确,spark-submit
执行者或内存数量较少。
打开Spark Web UI,检查数据是否未倾斜以及所有配置是否正确
答案 1 :(得分:0)
我想了一会儿这件事再次碰到了我的问题。所以想到会更新我如何修复它。问题不是spark-submit和spark-shell之间的区别,而是我们正在执行的代码结构的差异。
在Shell中,我将代码拆分并逐行执行,这导致Spark生成的代码快速高效。
使用Spark Submit,我们将代码打包并将其转换为具有Inheritence的类,以使代码更易于共享和重用,但这导致Spark生成的代码混乱且效率低下。当我们删除了大部分的继承并编写了更简单的功能更强大的代码时,性能又恢复了快速高效。
所以这里的教训是确保你不要过多地使用你的应用程序并且很少继承是正确的,但是你应该努力保持你的代码简单和功能性,以便Spark能够轻松生成快速有效的代码在集群上执行。