Apache Spark:TaskResultLost(结果从块管理器丢失)群集上的错误

Pay*_*yf1 3 java hadoop mapreduce apache-spark

我在Virtualbox上有一个带有3个从属服务器的Spark独立集群。我的代码是在Java上进行的,并且可以与我的小型输入数据集(它们的输入总计大约100MB)一起正常工作。

我将虚拟机的RAM设置为16GB,但是当我对大型输入文件(约2GB)运行代码时,在我的减速部分中进行了数小时的处理后,我得到此错误:

Job aborted due to stage failure: Total size of serialized results of 4 tasks (4.3GB) is bigger than spark.driver.maxResultSize`
Run Code Online (Sandbox Code Playgroud)

我编辑了,spark-defaults.conf并为分配了更高的金额(2GB和4GB)spark.driver.maxResultSize。它没有帮助,并且出现了相同的错误。

不,我正在尝试8GB的内存,spark.driver.maxResultSize而我spark.driver.memory也和RAM大小(16GB)相同。但是我得到这个错误:

TaskResultLost (result lost from block manager)
Run Code Online (Sandbox Code Playgroud)

对此有何评论?我还附有一张图片。

我不知道问题是否是由的大尺寸引起的,maxResultSize或者这与代码中的RDD集合有关。我还提供了代码的映射器部分,以更好地理解。

在此处输入图片说明

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;
Run Code Online (Sandbox Code Playgroud)

Shi*_*shT 5

通常,此错误表明您正在收集/将大量数据带入驱动程序。永远不要这样做。您需要重新考虑您的应用程序逻辑。

另外,您无需修改spark-defaults.conf即可设置属性。相反,您可以通过或中的--conf选项指定此类特定于应用程序的属性,具体取决于运行作业的方式。spark-shellspark-submit


Pay*_*yf1 5

解决了:

通过增加主 RAM 大小解决了该问题。我研究了我的案例,发现根据我的设计,分配 32GB RAM 就足够了。现在,通过这样做,我的程序运行良好并且可以正确计算所有内容。