Warum ist es möglich, dass "serialisierte Ergebnisse von n Aufgaben (XXXX MB)" größer als "spark.driver.memory" in pyspark sind?

8

Ich habe mit diesen Einstellungen (ua) einen Spark-Job gestartet:

%Vor%

Ich habe meinen pyspark -Auftrag debuggt, und er hat mir immer den Fehler mitgeteilt:

%Vor%

Also habe ich die spark.driver.maxResultSize auf 18 G in den Konfigurationseinstellungen erhöht. Und es hat funktioniert !!

Nun, das ist interessant, weil in beiden Fällen spark.driver.memory KLEINER war als die zurückgegebenen serialisierten Ergebnisse.

Warum ist das erlaubt? Ich würde annehmen, dass dies nicht möglich ist, weil die serialisierten Ergebnisse 17.4 GB waren, als ich debugging, das ist mehr als die Größe des Treibers, der 12 GB ist, wie oben gezeigt?

Wie ist das möglich?

    
simple 17.07.2016, 01:39
quelle

2 Antworten

0

Mein Verständnis ist, dass wenn wir Spark bitten, eine Aktion auszuführen, die Ergebnisse von allen Partitionen serialisiert werden, aber diese Ergebnisse müssen nicht an den Treiber gesendet werden, es sei denn, ein Vorgang wie collect() wird ausgeführt.

spark.driver.maxResultSize definiert ein Limit für die Gesamtgröße der serialisierten Ergebnisse aller Partitionen & amp; ist unabhängig von der tatsächlichen spark.driver.memory . Daher könnte Ihr spark.driver.memory kleiner sein als Ihr spark.driver.maxResultSize und Ihr Code würde immer noch funktionieren.

Wir könnten wahrscheinlich eine bessere Idee bekommen, wenn Sie uns die Transformationen und Aktionen mitteilen, die in diesem Prozess oder Ihrem Code-Snippet verwendet werden.

    
KartikKannapur 26.07.2016, 11:27
quelle
1

Dies ist möglich, weil spark.driver.memory den JVM-Treiberprozess nicht Python-Interpreter konfiguriert und Daten zwischen ihnen mit Sockets übertragen werden und der Treiberprozess nicht alle Daten im Speicher behalten muss (nicht in lokale Struktur konvertieren).

    
user6022341 21.07.2016 08:48
quelle