我使用此代码从文本文件中提取bigrams:
java.lang.OutOfMemoryError: GC overhead limit exceeded
at org.spark-project.jetty.util.BlockingArrayQueue.poll(BlockingArrayQueue.java:342)
at org.spark-project.jetty.util.thread.QueuedThreadPool.idleJobPoll(QueuedThreadPool.java:526)
at org.spark-project.jetty.util.thread.QueuedThreadPool.access$600(QueuedThreadPool.java:44)
at org.spark-project.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:572)
我的输入文件是45 MB, 当我运行此代码时,它显示以下错误: (我认为它与Collect())
有关Qt.application.arguments
我该如何解决这个问题?
答案 0 :(得分:1)
您可能实际上没有通过SparkConf获取要求的1g内存。原因是当master = local
时,Spark驱动程序和执行程序将完全在运行此处所示代码的JVM内运行,从而创建SparkContext。到那时,获取比JVM启动时分配的Java堆还为时已晚。您需要将-Xmx1G
arg添加到IntelliJ用于启动运行代码的JVM的命令中。
您没有确切地说明如何在IntelliJ中运行代码。但您需要做的是创建或修改“运行配置”。
在IntelliJ UI中的“运行”工具栏菜单下,选择“编辑配置...”命令。这将打开一个如下所示的窗口。这显示我的运行配置在“Scala控制台”中运行。 “VM选项:”框是您需要包含-Xmx1G
jvm arg的位置。就我而言,我正在使用2.5G的内存。
当您以前运行应用程序时,IntelliJ可能已经为您创建了运行配置。如果没有,请使用此窗口创建一个正确类型的新窗口,例如“Scala控制台”。
要检查正在运行的Scala应用程序中的内存,请使用以下命令检查实际的当前,最大和空闲的jvm内存,以查看您是否确实获得了所请求的内存。
答案 1 :(得分:0)
当您提交申请时,请尝试通过设置参数来增加spark.driver.memory(默认为512mb):
--driver-memory 4g
查看spark文档以获取有关此类参数的更多信息:https://spark.apache.org/docs/latest/configuration.html