Domanda PySpark: java.lang.OutofMemoryError: spazio heap Java


Recentemente ho usato PySpark con Ipython sul mio server con 24 CPU e 32 GB di RAM. Funziona solo su una macchina. Nel mio processo, voglio raccogliere un'enorme quantità di dati come indicato nel seguente codice:

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))

Quando io faccio

training_data =  train_dataRDD.collectAsMap()

Mi dà l'errore'OfMemory. Java heap Space. Inoltre, non posso eseguire alcuna operazione su Spark dopo questo errore perché perde la connessione con Java. Dà Py4JNetworkError: Cannot connect to the java server.

Sembra che lo spazio heap sia piccolo. Come posso impostarlo su limiti più grandi?

MODIFICARE:

Cose che ho provato prima di correre: sc._conf.set('spark.executor.memory','32g').set('spark.driver.memory','32g').set('spark.driver.maxResultsSize','0')

Ho modificato le opzioni spark come da documentazione qui (se fai ctrl-f e cerchi spark.executor.extraJavaOptions): http://spark.apache.org/docs/1.2.1/configuration.html 

Dice che posso evitare OOM impostando l'opzione spark.executor.memory. Ho fatto la stessa cosa ma sembra non funzionare.


18
2017-09-01 16:45


origine


risposte:


Dopo aver provato un sacco di parametri di configurazione, ho scoperto che c'è solo una necessità da modificare per abilitare più spazio di heap e cioè. 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

Chiudi la tua applicazione spark esistente e riutilizzala. Non incontrerai più questo errore. :)


28
2017-09-03 15:42