2016-06-30 14 views
0

Ich habe eine Spark-Anwendung, die nicht genügend Arbeitsspeicher, der Cluster verfügt über zwei Knoten mit rund 30G RAM, und die Eingabedatengröße ist über einige hundert GB.Apache Spark nicht genügend Arbeitsspeicher mit kleineren Partitionen

Die Anwendung ist ein Spark SQL-Auftrag, es liest Daten aus HDFS und erstellen Sie eine Tabelle und Cache, dann einige Spark SQL-Abfragen und schreibt das Ergebnis zurück in HDFS.

Anfangs teilte ich die Daten in 64 Partitionen und ich bekam OOM, dann konnte ich das Speicherproblem beheben, indem ich 1024 Partitionen verwendete. Aber warum habe ich mit mehr Partitionen geholfen, das OOM-Problem zu lösen?

Antwort

1

Die Lösung für Big Data ist die Partition (Divide and Conquer). Da nicht alle Daten in den Speicher passen konnten, und es auch nicht in einer einzigen Maschine verarbeitet werden konnte.

Jede Partition könnte in relativ kurzer Zeit in den Speicher passen und verarbeitet werden (Karte). Nachdem die Daten für jede Partition verarbeitet wurden. Es muss zusammengeführt werden (reduzieren). Das ist Tradition map reduce

Das Teilen von Daten zu mehr Partitionen bedeutet, dass jede Partition kleiner wird.

[Bearbeiten]

Funken mit Revolution Konzept Resilient Distributed DataSet (RDD) genannt.

  • Es gibt zwei Arten von Operationen, Transformation und Acton
  • Transformationen Abbildung von einem RDD zu einem anderen. Es wird faul bewertet. Diese RDD könnte als Zwischenergebnis behandelt werden, das wir nicht bekommen wollen.
  • Aktionen werden verwendet, wenn Sie wirklich die Daten abrufen möchten. Diese RDD/Daten könnten so behandelt werden, wie wir es wollen, wie zum Beispiel "Top-Fehler".
  • Spark analysiert den gesamten Vorgang und erstellt vor der Ausführung eine DAG (Directed Azyklic Graph).
  • Spark Start berechnen aus der Quelle RDD, wenn Aktionen ausgelöst werden. Dann vergessen Sie es.

Spark DAG

machte ich einen kleinen Screencast für eine Präsentation auf Youtube Spark Makes Big Data Sparking.

+0

Ich stimme zu, dass die Größe jeder Partition kleiner ist, aber da ich die RDD zwischenspeichern (sollte dies in der Post erwähnen), sollten diese Partitionen immer noch im Speicher sein, oder? Daher sollte die Größe der Daten im Speicher unabhängig von der Anzahl der Partitionen gleich sein – elgoog

Verwandte Themen