PySpark: java.lang.OutofMemoryError: пространство кучи Java
Я использую PySpark с Ipython в последнее время на моем сервере с 24 процессорами и 32 ГБ оперативной памяти. Он работает только на одной машине. В моем процессе я хочу собирать огромное количество данных, как показано ниже:
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 Error. 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')
Я изменил параметры искры в соответствии с документацией здесь (если вы делаете ctrl-f и ищете spark.executor.extraJavaOptions): http://spark.apache.org/docs/1.2.1/configuration.html
В нем говорится, что я могу избежать OOM, установив параметр spark.executor.memory. Я сделал то же самое, но, похоже, он не работает.
Ответы
Ответ 1
После тестирования множества конфигурационных параметров я обнаружил, что нужно только одно нужно изменить, чтобы включить больше пространства кучи, а т.е. 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
Закройте существующее искровое приложение и запустите его. Вы снова не столкнетесь с этой ошибкой.:)
Ответ 2
У меня была такая же проблема с pyspark
(установлена с brew
). В моем случае он был установлен по пути /usr/local/Cellar/apache-spark
.
Единственный файл конфигурации, который у меня был, был в apache-spark/2.4.0/libexec/python//test_coverage/conf/spark-defaults.conf
.
Как и было предложено здесь, я создал файл spark-defaults.conf
по пути /usr/local/Cellar/apache-spark/2.4.0/libexec/conf/spark-defaults.conf
и spark.driver.memory 12g
к нему строку spark.driver.memory 12g