apache spark:群集上的taskresultlost(从块管理器丢失的结果)错误

deyfvvtc  于 2021-05-27  发布在  Spark
关注(0)|答案(3)|浏览(1115)

我有一个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;
mepcadol

mepcadol1#

通常,此错误表示您正在收集/将大量数据带到驱动程序中。永远不应该这样做。您需要重新考虑您的应用程序逻辑。
而且,您不需要修改 spark-defaults.conf 设置属性。相反,您可以通过 --conf 中的选项 spark-shell 或者 spark-submit ,具体取决于作业的运行方式。

dzjeubhm

dzjeubhm2#

在我的例子中,我得到这个错误是因为防火墙阻止了驱动程序和执行程序之间的块管理器端口。端口可以指定为: spark.blockManager.port 以及 spark.driver.blockManager.port 看到了吗https://spark.apache.org/docs/latest/configuration.html#networking

xqnpmsa8

xqnpmsa83#

解决了的:
通过增加主存储器的大小来解决这个问题。我研究了我的案例,发现根据我的设计,分配32gb的ram就足够了。现在,通过做than,我的程序运行良好,计算一切都正确。

相关问题