2015-09-01 11 views
15

Ich habe mit PySpark mit IPython in letzter Zeit auf meinem Server mit 24 CPUs und 32 GB RAM. Es läuft nur auf einer Maschine. In meinem Prozess möchte ich riesige Menge an Daten sammeln, wie unten Code geben ist:PySpark: java.lang.OutOfMemoryError: Java Heap-Speicher

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

Als ich

tun
training_data = train_dataRDD.collectAsMap() 

Es gibt mir outOfMemory Fehler. Java heap Space. Außerdem kann ich nach diesem Fehler keine Operationen auf Spark ausführen, da es die Verbindung mit Java verliert. Es gibt Py4JNetworkError: Cannot connect to the java server.

Es sieht so aus, als wäre der Heap-Speicher klein. Wie kann ich größere Grenzen setzen?

EDIT:

Dinge, die ich vor der Ausführung versucht: sc._conf.set('spark.executor.memory','32g').set('spark.driver.memory','32g').set('spark.driver.maxResultsSize','0')

änderte ich die Funken Optionen gemäß der Dokumentation hier (wenn Sie ctrl-f tun und für spark.executor.extraJavaOptions suchen): http://spark.apache.org/docs/1.2.1/configuration.html

Es sagt, dass ich OOMs vermeiden kann, indem ich spark.executor.memory Option einstelle. Ich habe das Gleiche gemacht, aber es scheint nicht zu funktionieren.

+0

Überprüfen Sie diese Frage http://stackoverflow.com/questions/21138751/spark-java-lang-outofmemoryerror-java-heap-space –

+0

@bcaceiro: Ich sehe viele Funken Optionen in der Post gesetzt werden. Ich benutze keine Scala. Ich benutze IPython. Weißt du, ob ich diese Optionen innerhalb der Shell einstellen kann? – mousecoder

+0

@bcaceiro: Aktualisierte die Frage mit dem Vorschlag aus dem Post, den du mir auch leiteteest. Es scheint, dass es ein Problem mit JVM gibt. – mousecoder

Antwort

26

Nach Belastungen von Konfigurationsparametern versuchen, fand ich, dass es nur eine Notwendigkeit, mehr Heap Raum geändert werden soll, und spark.driver.memory das heißt zu ermöglichen.

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 

Schließen Sie Ihre vorhandene Spark-Anwendung und führen Sie sie erneut aus. Sie werden diesen Fehler nicht erneut auftreten. :)

+1

Können Sie diesen conf-Wert aus dem tatsächlichen Skript ändern (dh. 'Set ('spark.driver.memory', '15g')')? – swdev

+0

Ich versuchte es, aber war nicht erfolgreich. Ich denke, es muss mit neuen globalen Parametern neu gestartet werden. – mousecoder

+3

Von docs: spark.driver.memory „Größe des Speichers für den Fahrer Prozess zu verwenden, dh wo SparkContext initialisiert wird (zB 1 g, 2 g) . Hinweis:. Im Client-Modus muss diese Konfiguration nicht direkt durch die SparkConf eingestellt wird in Ihrer Anwendung, weil die Treiber-JVM bereits an diesem Punkt gestartet wurde. Setzen Sie dies stattdessen über die Befehlszeilenoption --driver-memory oder in der Standardeigenschaftendatei. " –

Verwandte Themen