Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 Verfahren, die Sie anwenden können, um den Arbeitsspeicher Ihres Clusters effizient zu nutzen.
- Legen Sie kleinere Datenpartitionen an, und berücksichtigen Sie in Ihrer Partitionierungsstrategie die Größe, den Typ und die Verteilung Ihrer Daten.
- Berücksichtigen Sie die neuere, effizientere
Kryo data serializationund nicht die standardmäßige Java-Serialisierung. - Verwenden Sie vorzugsweise YARN, da dies
spark-submitnach Batches aufteilt. - Überwachen und optimieren Sie die Spark-Konfigurationseinstellungen.
Die folgende Abbildung zeigt die Spark-Arbeitsspeicherstruktur und einige wichtige Arbeitsspeicherparameter für den Executor.
Überlegungen zum Spark-Arbeitsspeicher
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 ihre Beziehungen.
Um Meldungen zu unzureichendem Arbeitsspeicher zu beheben, versuchen Sie Folgendes:
- Überprüfen Sie die Shufflevorgänge in der DAG-Verwaltung. 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
ReduceByKeymit seinem festen Speicherlimit gegenüberGroupByKey, das Aggregationen, Window-Funktionen und andere Funktionen bereitstellt, aber ein ungebundenes Speicherlimit hat. - Verwenden Sie
TreeReduce, welches einen größeren Teil der Verarbeitung in den Executors oder Partitionen ausführt, anstelle vonReduce, das die gesamte Arbeit im Treiber erledigt. - Verwenden Sie DataFrames anstelle der RDD-Objekte auf niedrigerer Ebene.
- Erstellen Sie ComplexTypes, die Aktionen kapseln, wie 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.