ChatGPT解决这个技术问题 Extra ChatGPT

PySpark:java.lang.OutofMemoryError:Java 堆空间

我最近在具有 24 个 CPU 和 32GB RAM 的服务器上使用了 PySpark 和 Ipython。它只在一台机器上运行。在我的过程中,我想收集大量数据,如下面的代码所示:

train_dataRDD = (train.map(lambda x:getTagsAndText(x))
.filter(lambda x:x[-1]!=[])
.flatMap(lambda (x,text,tags): [(tag,(x,text)) for tag in tags])
.groupByKey()
.mapValues(list))

当我做

training_data =  train_dataRDD.collectAsMap()

它给了我 outOfMemory 错误。 Java heap Space。此外,在此错误之后,我无法在 Spark 上执行任何操作,因为它与 Java 失去了连接。它给出 Py4JNetworkError: Cannot connect to the java server

看起来堆空间很小。如何将其设置为更大的限制?

编辑:

我在运行前尝试过的事情:sc._conf.set('spark.executor.memory','32g').set('spark.driver.memory','32g').set('spark.driver.maxResultsSize','0')

我根据此处的文档更改了 spark 选项(如果您执行 ctrl-f 并搜索 spark.executor.extraJavaOptions):http://spark.apache.org/docs/1.2.1/configuration.html

它说我可以通过设置 spark.executor.memory 选项来避免 OOM。我做了同样的事情,但它似乎不起作用。

@bcaceiro:我看到帖子中设置了很多火花选项。我不使用斯卡拉。我正在使用 IPython。你知道我是否可以在 shell 中设置这些选项吗?
@bcaceiro:用您也指导我的帖子中的建议更新了问题。 JVM似乎有一些问题。

p
pg2455

在尝试了很多配置参数后,我发现只需要更改一个即可启用更多的堆空间,即spark.driver.memory

sudo vim $SPARK_HOME/conf/spark-defaults.conf
#uncomment the spark.driver.memory and change it according to your use. I changed it to below
spark.driver.memory 15g
# press : and then wq! to exit vim editor

关闭现有的 spark 应用程序并重新运行它。您不会再遇到此错误。 :)


您可以从实际脚本(即set('spark.driver.memory','15g'))更改此 conf 值吗?
我试过这样做,但没有成功。我认为它需要使用新的全局参数重新启动。
来自文档:spark.driver.memory “用于驱动程序进程的内存量,即初始化 SparkContext 的位置。(例如 1g、2g)。注意:在客户端模式下,不得通过 SparkConf 直接在您的“
我正在使用从 IDEA SBT 控制台运行的 SBT 运行 Spark 代码,我的解决方法是将 -Xmx4096M -d64 添加到在 SBT 控制台启动时传递的 java VM 参数。这是在 Other settings -> SBT
Spark 不断发展。因此,您可能需要查看其文档并找出与内存分配相关的配置参数。
l
louis_guitton

如果您正在寻找从脚本或 jupyter 笔记本中设置它的方法,您可以执行以下操作:

from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .master('local[*]') \
    .config("spark.driver.memory", "15g") \
    .appName('my-cool-app') \
    .getOrCreate()

F
Francesco Boi

我在使用 pyspark(与 brew 一起安装)时遇到了同样的问题。在我的例子中,它安装在路径 /usr/local/Cellar/apache-spark 上。

我拥有的唯一配置文件在 apache-spark/2.4.0/libexec/python//test_coverage/conf/spark-defaults.conf 中。

正如建议的 here,我在路径 /usr/local/Cellar/apache-spark/2.4.0/libexec/conf/spark-defaults.conf 中创建了文件 spark-defaults.conf,并将行 spark.driver.memory 12g 附加到它上面。