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

时间:2015-09-01 16:45:02

标签: java apache-spark out-of-memory heap-memory pyspark

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

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。我做了同样的事情,但似乎没有用。

3 个答案:

答案 0 :(得分:37)

在尝试了大量配置参数后,我发现只需要更改一个配置参数就可以启用更多堆空间,即 [,1] [,2] [,3] [1,] 384.1700 513.2758 624.3275 [2,] 385.5346 514.5599 624.4023 [3,] 402.4771 530.8293 628.1450

spark.driver.memory

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

答案 1 :(得分:10)

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

from pyspark.sql import SparkSession

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

答案 2 :(得分:0)

pyspark(与brew一起安装)存在相同的问题。就我而言,它安装在路径/usr/local/Cellar/apache-spark上。

我仅有的配置文件位于apache-spark/2.4.0/libexec/python//test_coverage/conf/spark-defaults.conf中。

按照建议的here,我在路径spark-defaults.conf中创建了文件/usr/local/Cellar/apache-spark/2.4.0/libexec/conf/spark-defaults.conf,并在其后附加了行spark.driver.memory 12g