PySpark: java.lang.OutofMemoryError: espacio de almacenamiento dinámico de Java
apache-spark out-of-memory (1)
He estado usando PySpark con Ipython últimamente en mi servidor con 24 CPU y 32 GB de RAM. Se ejecuta sólo en una máquina. En mi proceso, quiero recopilar una gran cantidad de datos como se indica en el siguiente código:
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))
Cuando lo hago
training_data = train_dataRDD.collectAsMap()
Me da un error fuera de memoria. Java heap Space
. Además, no puedo realizar ninguna operación en Spark después de este error, ya que pierde la conexión con Java. Da Py4JNetworkError: Cannot connect to the java server
.
Parece que el espacio del montón es pequeño. ¿Cómo puedo ponerlo a límites más grandes?
EDITAR :
Cosas que intenté antes de ejecutar: sc._conf.set(''spark.executor.memory'',''32g'').set(''spark.driver.memory'',''32g'').set(''spark.driver.maxResultsSize'',''0'')
Cambié las opciones de chispa según la documentación aquí (si hace ctrl-f y busca spark.executor.extraJavaOptions): http://spark.apache.org/docs/1.2.1/configuration.html
Dice que puedo evitar los OOM configurando la opción spark.executor.memory. Hice lo mismo pero parece no estar funcionando.
Después de probar un montón de parámetros de configuración, descubrí que solo hay que cambiar una para habilitar más espacio de spark.driver.memory
y, por ejemplo, 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
Cierre su aplicación de chispa existente y vuelva a ejecutarla. No volverás a encontrar este error. :)