Freigeben über


Optimierung der Speichernutzung für Apache Spark

In diesem Artikel wird erläutert, wie Sie die Speicherverwaltung Ihres Apache Spark-Clusters für eine optimale Leistung in Azure HDInsight optimieren.

Überblick

Spark wird durch Platzieren von Daten im Arbeitsspeicher betrieben. Das Verwalten von Speicherressourcen ist daher ein wichtiger Aspekt der Optimierung der Ausführung von Spark-Aufträgen. Es gibt mehrere Techniken, die Sie anwenden können, um den Speicher Ihres Clusters effizient zu verwenden.

  • Bevorzugen Sie kleinere Datenpartitionen und berücksichtigen Sie datengröße, Typen und Verteilung in Ihrer Partitionierungsstrategie.
  • Berücksichtigen Sie die neuere, effizientere Kryo data serializationund nicht die standardmäßige Java-Serialisierung.
  • Bevorzugen Sie die Verwendung von YARN, da es spark-submit nach Batch trennt.
  • Überwachen und Optimieren von Spark-Konfigurationseinstellungen

Für Ihre Referenz werden die Spark-Speicherstruktur und einige Schlüsselausführerspeicherparameter in der nächsten Abbildung angezeigt.

Überlegungen zum Spark Memory

Wenn Sie Apache Hadoop YARN verwenden, steuert YARN den Von allen Containern auf jedem Spark-Knoten verwendeten Speicher. Das folgende Diagramm zeigt die wichtigsten Objekte und deren Beziehungen.

YARN Spark Memory Management.

Um nachrichten außerhalb des Arbeitsspeichers zu adressieren, versuchen Sie Folgendes:

  • Überprüfung von DAG-Management-Shuffles. Verringern Sie die Datenmenge durch zuordnungsseitige Reduktion, partitionieren Sie Quelldaten vorab (oder legen Sie sie in Buckets ab), maximieren Sie einzelne Shufflevorgänge, und verringern Sie die Menge an gesendeten Daten.
  • Bevorzugen Sie ReduceByKey mit seinem festen Speicherlimit statt GroupByKey, das Aggregationen, Fensterfunktionen und andere Funktionen bereitstellt, aber ein ungebundenes Speicherlimit hat.
  • Bevorzugen Sie TreeReduce, das mehr Arbeit auf den Executoren oder Partitionen verrichtet, gegenüber Reduce, der alle Arbeiten auf dem Treiber durchführt.
  • Verwenden Sie DataFrames anstelle der RDD-Objekte auf niedrigerer Ebene.
  • Erstellen Sie ComplexTypes, die Aktionen kapseln, z. B. "Top N", verschiedene Aggregationen oder Fenstervorgänge.

Weitere Schritte zur Problembehandlung finden Sie unter OutOfMemoryError-Ausnahmen für Apache Spark in Azure HDInsight.

Nächste Schritte