为什么 Apache Spark 执行器在将远小于配置内存的内容写入文件时会导致 OutOfMemoryError?

问题描述 投票:0回答:1

我正在尝试诊断由 Spark 执行器引起的 OutOfMemoryError,希望有人能够在这里帮助我......

配置

我在 Windows 计算机上以独立模式运行 Spark (3.1.3)。 我的 JVM 实例设置为 2g 内存。 我的 Spark 执行器内存是 1g (

spark.executor.memory
)。

场景

我只是对本地文件系统中的一些镶木地板文件运行 Spark SQL 查询。 我想测试我们系统的其他部分,看看它如何处理一个超长记录(行),所以我给出了一个 Spark SQL 查询,如下所示:

SELECT repeat('A', 50000000) AS test

当我运行此查询并写入 csv 文件时,JVM 进程崩溃并出现 java.lang.OutOfMemoryError: Java heap space

问题

据我了解,输入数据大约为50 MB(5000万个字符),这应该比配置的执行器内存空间(1g)小得多。

我检查了堆转储,确实看到了该 char 数组的大量副本,导致内存使用量约为 800 MB。

但是,如果我使用具有更大输入(例如 200 MB)但不是如此巨大的行的不同查询,那就没问题。

Spark 对一条记录制作这么多副本正常吗?那么有没有办法避免这种OOM呢?谢谢你

参考

这是例外的一部分:

Thread 'Executor task launch worker for task 0.0 in stage 6.0 (TID 35)' with ID = 135
java.lang.OutOfMemoryError.<init>(OutOfMemoryError.java:48)
java.util.Arrays.copyOf(Arrays.java:3332)
    com.univocity.parsers.common.input.ExpandingCharAppender.expand(ExpandingCharAppender.java:115)
    com.univocity.parsers.common.input.ExpandingCharAppender.expand(ExpandingCharAppender.java:123)
    com.univocity.parsers.common.input.ExpandingCharAppender.append(ExpandingCharAppender.java:207)
com.univocity.parsers.csv.CsvWriter.append(CsvWriter.java:405)
com.univocity.parsers.csv.CsvWriter.processRow(CsvWriter.java:228)
    com.univocity.parsers.common.AbstractWriter.submitRow(AbstractWriter.java:352)
    com.univocity.parsers.common.AbstractWriter.writeRow(AbstractWriter.java:830)
    org.apache.spark.sql.catalyst.csv.UnivocityGenerator.write(UnivocityGenerator.scala:94)
    org.apache.spark.sql.execution.datasources.csv.CsvOutputWriter.write(CsvOutputWriter.scala:46)
    org.apache.spark.sql.execution.datasources.SingleDirectoryDataWriter.write(FileFormatDataWriter.scala:140)

我尝试阅读Spark内存管理,但仍然可以找到相关资料。 我尝试缓存数据并将数据仅保留在磁盘中,但没有任何帮助。

apache-spark jvm
1个回答
0
投票

从您的描述来看,您似乎在单 JVM 模式下运行 Spark,这是 local 模式,而不是 standalone,这实际上是集群运行时。

在本地模式下,不使用执行程序设置,您需要使用

spark.driver.memory=2g
配置或
--driver-memory 2g
spark-submit cli 参数指定驱动程序上的内存要求。

© www.soinside.com 2019 - 2024. All rights reserved.