Wie kann ich den für Apache Spark Executor-Knoten verfügbaren Speicher erhöhen?
Ich habe eine 2-GB-Datei, die zum Laden in Apache Spark geeignet ist. Ich führe momentan Apache Spark auf einem Computer aus, sodass sich Treiber und Executor auf demselben Computer befinden. Das Gerät verfügt über 8 GB Speicher.
Wenn ich versuche, die Zeilen der Datei zu zählen, nachdem ich die zwischengespeicherte Datei im Speicher festgelegt habe, werden folgende Fehler angezeigt:
2014-10-25 22:25:12 WARN CacheManager:71 - Not enough space to cache partition rdd_1_1 in memory! Free memory is 278099801 bytes.
Ich schaute auf die Dokumentation hier und setzen spark.executor.memory
auf 4g
in$SPARK_HOME/conf/spark-defaults.conf
Die Benutzeroberfläche zeigt, dass diese Variable in der Spark-Umgebung festgelegt ist. Screenshot finden Sie hier
Wenn ich jedoch zur Registerkarte Executor gehe, ist das Speicherlimit für meinen einzelnen Executor immer noch auf 265,4 MB festgelegt. Ich bekomme auch immer noch den gleichen Fehler.
Ich habe verschiedene hier erwähnte Dinge ausprobiert , aber ich erhalte immer noch den Fehler und habe keine klare Vorstellung davon, wo ich die Einstellung ändern soll.
Ich führe meinen Code interaktiv über die Spark-Shell aus
quelle
Beachten Sie auch, dass Sie für den lokalen Modus die Größe des Treiberspeichers festlegen müssen, bevor Sie jvm starten:
Dadurch wird die JVM mit 2G anstelle der Standard-512M gestartet.
Details hier :
quelle
Anscheinend sagt die Frage nie, im lokalen Modus zu laufen, nicht auf Garn. Irgendwie konnte ich die Änderung von spark-default.conf nicht zum Laufen bringen. Stattdessen habe ich es versucht und es hat bei mir funktioniert
(Der Executor-Speicher konnte nicht auf 8 g erhöht werden, da die Garnkonfiguration einige Einschränkungen aufweist.)
quelle
executor-memory
höher alsdriver-memory
?Die Antwort von Grega half mir, mein Problem zu lösen. Ich führe Spark lokal über ein Python-Skript in einem Docker-Container aus. Bei der Verarbeitung einiger Daten in Spark wurde anfangs ein Java-Fehler aufgrund von Speichermangel angezeigt. Ich konnte jedoch mehr Speicher zuweisen, indem ich meinem Skript die folgende Zeile hinzufügte:
Hier ist ein vollständiges Beispiel für das Python-Skript, mit dem ich Spark starte:
quelle
Sie müssen den Treiberspeicher erhöhen. Auf einem Mac (dh wenn er auf einem lokalen Master ausgeführt wird) beträgt der Standardtreiberspeicher 1024 MB. Standardmäßig werden dem Executor somit 380 MB zugewiesen.
Beim Erhöhen von [ --driver-memory 2G ] wurde der Executor-Speicher auf ~ 950 MB erhöht.
quelle
Erstellen Sie eine Datei mit dem Namen spark-env.sh im Verzeichnis spark / conf und fügen Sie diese Zeile hinzu
quelle
SPARK_WORKER_MEMORY
.Sie können einen Befehl anhand des folgenden Beispiels erstellen
quelle
Der Spark-Executor-Speicher ist erforderlich, um Ihre Spark-Tasks gemäß den Anweisungen Ihres Treiberprogramms auszuführen. Grundsätzlich sind mehr Ressourcen erforderlich, die von Ihrem übergebenen Job abhängen.
Der Executor-Speicher umfasst den für die Ausführung der Aufgaben erforderlichen Speicher sowie den Overhead-Speicher, der nicht größer als die Größe der JVM und die maximale Garngröße des Garns sein sollte.
Fügen Sie die folgenden Parameter in der Datei spark-defaults.conf hinzu
Wenn Sie Clusterverwaltungstools wie Cloudera Manager oder Amabari verwenden , aktualisieren Sie die Clusterkonfiguration, um die neuesten Konfigurationen für alle Knoten im Cluster wiederzugeben.
Alternativ können wir den Executor-Kern und den Speicherwert als Argument übergeben, während der
spark-submit
Befehl zusammen mit der Klasse und dem Anwendungspfad ausgeführt wird.Beispiel:
quelle
Sie haben erwähnt, dass Sie Ihren Code interaktiv auf der Spark-Shell ausführen. Wenn also kein geeigneter Wert für den Treiber- oder Executor-Speicher festgelegt ist, weist spark ihm standardmäßig einen Wert zu, der auf der Eigenschaftendatei basiert (wobei der Standardwert ist) erwähnt werden).
Ich hoffe, Sie sind sich der Tatsache bewusst, dass es einen Treiber (Master-Knoten) und einen Worker-Knoten (wo Executoren erstellt und verarbeitet werden) gibt. Daher benötigt das Spark-Programm grundsätzlich zwei Arten von Speicherplatz, wenn Sie also festlegen möchten Treiberspeicher dann beim Start Spark-Shell.
spark-shell --driver-memory "dein Wert" und um den Executor-Speicher einzustellen: spark-shell --executor-memory "dein Wert"
dann denke ich, dass Sie gut sind, um mit dem gewünschten Wert des Speichers zu gehen, den Ihre Funkenhülle verwenden soll.
quelle
quelle
Unter Windows oder Linux können Sie diesen Befehl verwenden:
quelle
Soweit ich weiß, wäre es nicht möglich, die
spark.executor.memory
Laufzeit zu ändern . Wenn Sie eine eigenständige Version mit pyspark und graphframes ausführen, können Sie den pyspark starten,REPL
indem Sie den folgenden Befehl ausführen:Stellen Sie sicher, dass Sie die
SPARK_VERSION
Umgebungsvariable in Bezug auf die neueste veröffentlichte Version von Spark entsprechend ändernquelle