Mein Cluster: 1 Master, 11 Slaves, jeder Knoten hat 6 GB Speicher.Spark java.lang.OutOfMemoryError: Java-Heap-Speicher
Meine Einstellungen:
spark.executor.memory=4g, Dspark.akka.frameSize=512
Hier ist das Problem:
Erste ich einige Daten lesen (2,19 GB) von HDFS RDD:
val imageBundleRDD = sc.newAPIHadoopFile(...)
Zweite, tun Sie etwas auf dieser RDD:
val res = imageBundleRDD.map(data => {
val desPoints = threeDReconstruction(data._2, bg)
(data._1, desPoints)
})
Last, Ausgabe HDFS:
res.saveAsNewAPIHadoopFile(...)
Wenn ich mein Programm ausführen es zeigt:
.....
14/01/15 21:42:27 INFO cluster.ClusterTaskSetManager: Starting task 1.0:24 as TID 33 on executor 9: Salve7.Hadoop (NODE_LOCAL)
14/01/15 21:42:27 INFO cluster.ClusterTaskSetManager: Serialized task 1.0:24 as 30618515 bytes in 210 ms
14/01/15 21:42:27 INFO cluster.ClusterTaskSetManager: Starting task 1.0:36 as TID 34 on executor 2: Salve11.Hadoop (NODE_LOCAL)
14/01/15 21:42:28 INFO cluster.ClusterTaskSetManager: Serialized task 1.0:36 as 30618515 bytes in 449 ms
14/01/15 21:42:28 INFO cluster.ClusterTaskSetManager: Starting task 1.0:32 as TID 35 on executor 7: Salve4.Hadoop (NODE_LOCAL)
Uncaught error from thread [spark-akka.actor.default-dispatcher-3] shutting down JVM since 'akka.jvm-exit-on-fatal-error' is enabled for ActorSystem[spark]
java.lang.OutOfMemoryError: Java heap space
Es gibt zu viele Aufgaben?
PS: Alles ist in Ordnung, wenn die Eingabedaten etwa 225 MB sind.
Wie kann ich dieses Problem lösen?
wie Funken laufen kann? ist es von der Konsole? oder welche deploy-Skripte verwenden Sie? – Tombart
Ich verwende sbt, um meine App zu kompilieren und auszuführen. sbt Paket dann sbt run. Ich habe das gleiche Programm vor einem Monat auf hadoop implementiert, und ich habe das gleiche Problem mit OutOfMemoryError, aber in hadoop kann es leicht gelöst werden, indem man den Wert von mapred.child.java.opts von Xmx200m auf Xmx400m erhöht. Hat Spark irgendeine jvm-Einstellung für seine Aufgaben? Ich frage mich, ob spark.executor.memory dieselbe Bedeutung hat wie mapred.child.java.opts in hadoop. In meinem Programm wurde spark.executor.memory bereits auf 4g viel größer als Xmx400m in hadoop eingestellt. Danke ~ – hequn8128
Sind die drei Schritte, die Sie erwähnen, die einzigen, die Sie tun? Wie groß ist die Größe der von (data._1, desPoints) generierten Daten - dies sollte in den Speicher passen, insbesondere wenn diese Daten dann in eine andere Stufe verschoben werden. –