2015-07-16 14 views
9

Sto cercando di costruire un recommender utilizzando Spark ed appena ha esaurito la memoria:Aumenta disposizione PySpark in fase di esecuzione

Exception in thread "dag-scheduler-event-loop" java.lang.OutOfMemoryError: Java heap space 

mi piacerebbe per aumentare la memoria disponibile per Spark modificando la proprietà spark.executor.memory , in PySpark, in fase di esecuzione.

È possibile? Se é cosi, come?

aggiornamento

ispirato il link in @ di zero323 commento, ho cercato di eliminare e ricreare il contesto in PySpark:

del sc 
from pyspark import SparkConf, SparkContext 
conf = (SparkConf().setMaster("http://hadoop01.woolford.io:7077").setAppName("recommender").set("spark.executor.memory", "2g")) 
sc = SparkContext(conf = conf) 

tornato:

ValueError: Cannot run multiple SparkContexts at once; 

Questo è strano, dal:

>>> sc 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'sc' is not defined 
+0

Cosa intendi con "in fase di esecuzione"? Modificando esistente 'SparkContext'? – zero323

+0

Sì, esattamente. Mi piacerebbe aumentare la quantità di memoria all'interno della sessione PySpark. –

+0

All'interno della sessione si [interrompe il contesto esistente e ne crei uno nuovo] (http://stackoverflow.com/a/31402667/1560062) utilizzando impostazioni specifiche, ma per quanto ne so non è possibile modificarne uno esistente. – zero323

risposta

25

È possibile impostare spark.executor.memory quando si avvia il pyspark-shell

pyspark --num-executors 5 --driver-memory 2g --executor-memory 2g 
16

io non sono sicuro perché hai scelto la risposta di cui sopra quando si richiede di riavviare il guscio e apertura con un comando diverso! Sebbene funzioni e sia utile, esiste una soluzione in linea che è ciò che è stato effettivamente richiesto. Questo è essenzialmente ciò che @ zero323 fa riferimento nei commenti sopra, ma il link porta a un post che descrive l'implementazione in Scala. Di seguito è una implementazione funzionante appositamente per PySpark.

Nota: SparkContext che si desidera modificare le impostazioni per non deve essere stato avviato oppure è necessario chiuderlo, modificare le impostazioni e riaprire.

from pyspark import SparkContext 
SparkContext.setSystemProperty('spark.executor.memory', '2g') 
sc = SparkContext("local", "App Name") 

fonte: https://spark.apache.org/docs/0.8.1/python-programming-guide.html

P.S. se avete bisogno di chiudere la SparkContext basta usare:

SparkContext.stop(sc) 

e per ricontrollare le impostazioni attuali che sono stati impostati è possibile utilizzare:

sc._conf.getAll() 
4

Per quanto ne so che non sarebbe possibile per modificare spark.executor.memory in fase di esecuzione. I contenitori, sui datanode, verranno creati anche prima dell'inizializzazione del contesto spark.

Problemi correlati