我有一个spark独立集群,在virtualbox上有3个从属服务器。我的代码是基于java的,它可以很好地处理我的小输入数据集,这些数据集的输入总容量约为100mb。
我将我的虚拟机ram设置为16gb,但当我在大输入文件(约2gb)上运行代码时,我在reduce部分处理了数小时后出现了以下错误:
Job aborted due to stage failure: Total size of serialized results of 4 tasks (4.3GB) is bigger than spark.driver.maxResultSize`
我编辑了 spark-defaults.conf
并为 spark.driver.maxResultSize
. 这没用,同样的错误出现了。
不,我在试8gb的 spark.driver.maxResultSize
还有我的 spark.driver.memory
也与ram大小(16gb)相同。但我有个错误:
TaskResultLost (result lost from block manager)
对此有何评论?我还包括一个图像。
我不知道这个问题是不是因为 maxResultSize
或者这是代码中RDD的集合。我还提供了代码的Map器部分,以便更好地理解。
JavaRDD<Boolean[][][]> fragPQ = uData.map(new Function<String, Boolean[][][]>() {
public Boolean[][][] call(String s) {
Boolean[][][] PQArr = new Boolean[2][][];
PQArr[0] = new Boolean[11000][];
PQArr[1] = new Boolean[11000][];
for (int i = 0; i < 11000; i++) {
PQArr[0][i] = new Boolean[11000];
PQArr[1][i] = new Boolean[11000];
for (int j = 0; j < 11000; j++) {
PQArr[0][i][j] = true;
PQArr[1][i][j] = true;
3条答案
按热度按时间mepcadol1#
通常,此错误表示您正在收集/将大量数据带到驱动程序中。永远不应该这样做。您需要重新考虑您的应用程序逻辑。
而且,您不需要修改
spark-defaults.conf
设置属性。相反,您可以通过--conf
中的选项spark-shell
或者spark-submit
,具体取决于作业的运行方式。dzjeubhm2#
在我的例子中,我得到这个错误是因为防火墙阻止了驱动程序和执行程序之间的块管理器端口。端口可以指定为:
spark.blockManager.port
以及spark.driver.blockManager.port
看到了吗https://spark.apache.org/docs/latest/configuration.html#networkingxqnpmsa83#
解决了的:
通过增加主存储器的大小来解决这个问题。我研究了我的案例,发现根据我的设计,分配32gb的ram就足够了。现在,通过做than,我的程序运行良好,计算一切都正确。