Wie kann ich meine Daten über die Partitionen verteilen?

9

Bearbeiten : Die Antwort hilft, aber ich habe meine Lösung beschrieben in: MemoryOverhead-Problem in Spark .

Ich habe eine RDD mit 202092 Partitionen, die einen Datensatz liest, der von anderen erstellt wurde. Ich kann manuell sehen, dass die Daten über die Partitionen nicht ausgeglichen sind, zum Beispiel einige von ihnen haben 0 Bilder und andere haben 4k, während der Mittelwert bei 432 liegt. Bei der Verarbeitung der Daten habe ich diesen Fehler:

%Vor%

, während die Speicherkapazität bereits erhöht ist. Ich spüre, dass einige Spikes passieren, die dazu führen, dass Yarn meinen Container tötet, weil dieser Spike die angegebenen Grenzen überschreitet.

Also, was soll ich tun, um sicherzustellen, dass meine Daten (grob) über Partitionen verteilt sind?

Meine Idee war, dass repartition () würde funktionieren, ruft Shuffling auf:

%Vor%

Aber ich habe genau den gleichen Fehler, trotz der Programmieranleitung :

  

Neupartitionierung (numPartitions)

     

Mischen Sie die Daten in der RDD zufällig neu, um mehr oder weniger zu erstellen   Partitionen und balancieren sie über sie hinweg . Dies mischt immer alle Daten   über das Netzwerk.

Überprüfen Sie jedoch mein Spielzeugbeispiel:

%Vor%     
gsamaras 06.08.2016, 01:31
quelle

1 Antwort

4

Das Speicher-Overhead-Limit, das das Problem übersteigt, ist meiner Meinung nach auf DirectMemory-Puffer zurückzuführen, die während des Abrufens verwendet wurden. Ich denke, es ist in 2.0.0 behoben. (Wir hatten das gleiche Problem, aber hörten auf, tiefer zu graben, als wir herausfanden, dass das Upgrade auf 2.0.0 das Problem gelöst hat. Leider habe ich keine Spark-Nummern, um mich zu unterstützen.)

Die ungleichmäßigen Partitionen nach repartition sind überraschend. Vergleichen Sie mit Ссылка . Spark generiert sogar zufällige Schlüssel in repartition , also wird es nicht mit einem Hash gemacht, der voreingenommen sein könnte.

Ich habe Ihr Beispiel ausprobiert und die genauen gleichen Ergebnisse mit Spark 1.6.2 und Spark 2.0.0 erhalten. Aber nicht von Scala spark-shell :

%Vor%

Solche schönen Partitionen!

(Entschuldigung, das ist keine vollständige Antwort. Ich wollte nur meine bisherigen Ergebnisse teilen.)

    
Daniel Darabos 06.08.2016, 10:39
quelle