PySpark: java.lang.OutofMemoryError: Java heap space
PySpark: java.lang.OutofMemoryError: Java heap space
我最近在我的服务器上使用 PySpark 和 Ipython,有 24 个 CPU 和 32GB 内存。它 运行 仅在一台机器上。在我的过程中,我想收集大量数据,如下面的代码所示:
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
.
看起来堆 space 很小。我怎样才能将它设置为更大的限制?
编辑:
我之前尝试过的事情运行:
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。我做了同样的事情,但它似乎不起作用。
在尝试了大量配置参数后,我发现只有一个需要更改以启用更多堆 space,即 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 应用程序并重新 运行 它。您不会再遇到此错误。 :)
我在 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
.
如果您正在寻找从脚本或 jupyter notebook 中进行设置的方法,您可以这样做:
from pyspark.sql import SparkSession
spark = SparkSession.builder \
.master('local[*]') \
.config("spark.driver.memory", "15g") \
.appName('my-cool-app') \
.getOrCreate()
我最近在我的服务器上使用 PySpark 和 Ipython,有 24 个 CPU 和 32GB 内存。它 运行 仅在一台机器上。在我的过程中,我想收集大量数据,如下面的代码所示:
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
.
看起来堆 space 很小。我怎样才能将它设置为更大的限制?
编辑:
我之前尝试过的事情运行:
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。我做了同样的事情,但它似乎不起作用。
在尝试了大量配置参数后,我发现只有一个需要更改以启用更多堆 space,即 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 应用程序并重新 运行 它。您不会再遇到此错误。 :)
我在 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
.
如果您正在寻找从脚本或 jupyter notebook 中进行设置的方法,您可以这样做:
from pyspark.sql import SparkSession
spark = SparkSession.builder \
.master('local[*]') \
.config("spark.driver.memory", "15g") \
.appName('my-cool-app') \
.getOrCreate()