Direkt zum Hauptinhalt

Spark-Optimierung

DATABRICKS KOSTENLOS TESTEN

Was ist Spark-Leistungsoptimierung?

Die Spark-Leistungsoptimierung von Spark bezeichnet den Vorgang, bei dem Einstellungen angepasst werden, um die Verwendung von Speicher, Prozessorkernen und Instanzen im System zu optimieren. Dieser Prozess garantiert eine einwandfreie Performance von Spark und verhindert zudem einen Engpass der Ressourcen in Spark. Spark-Leistungsoptimierung

Was ist Datenserialisierung?

Um die Speichernutzung zu reduzieren, müssen Sie Spark-RDDs möglicherweise in serialisierter Form speichern. Die Daten-Serialisierung trägt auch zu einer guten Netzwerkleistung bei. Sie können in Spark gute Performance-Ergebnisse erzielen, indem Sie:

  • Die Jobs beenden, die zu lange dauern.
  • Sicherstellen, dass die Jobs in einer genauen Ausführungs-Engine ausgeführt werden.
  • Alle Ressourcen auf effiziente Weise nutzen.
  • Die Performance des Systems verbessern.

Spark unterstützt zwei Serialisierungsbibliotheken, und zwar wie folgt:

  • Java-Serialisierung
  • Kryo-Serialisierung

Was ist Speicheroptimierung?

Bei der Nutzung der Speicheroptimierung fallen drei Aspekte auf:

  • Das gesamte Dataset muss in den Speicher passen. Die Berücksichtigung des von Ihren Objekten verwendeten Speichers ist ein Muss.
  • Durch einen erhöhten Umschlag von Objekten wird die Notwendigkeit einer Bereinigung herbeigeführt.
  • Sie müssen die Kosten für den Zugriff auf diese Objekte beachten.

Was ist Datenstrukturoptimierung?

Eine Möglichkeit, den Speicherverbrauch zu reduzieren, besteht darin, auf Java-Funktionen zu verzichten, die zu einer zusätzlichen Belastung führen könnten. Hier einige Möglichkeiten:

  • Falls die RAM-Größe weniger als 32 GB beträgt, sollte das JVM-Flag auf –xx:+ UseCompressedOops gesetzt werden. Dieser Vorgang wird einen Zeiger von vier statt acht Byte erstellen.
  • Verschachtelte Strukturen können durch die Verwendung mehrerer kleiner Objekte sowie Zeiger umgangen werden.
  • Anstatt Strings als Key zu verwenden, könnten Sie numerische IDs und aufgezählte Objekte verwenden.

Was ist Bereinigungsoptimierung?

Um den enormen Churn zu vermeiden, der mit den RDDs verbunden ist, die zuvor vom Programm gespeichert wurden, verwirft Java alte Objekte, um Platz für neue zu schaffen. Durch die Verwendung von Datenstrukturen, die weniger Objekte enthalten, werden die Kosten jedoch erheblich reduziert. Ein solches Beispiel wäre die Verwendung eines Arrays von Ints anstelle einer verknüpften Liste. Alternativ können Sie Objekte in serialisierter Form verwenden, sodass Sie für jede RDD-Partition nur ein einziges Objekt haben.

Was ist Speicherverwaltung?

Eine effiziente Speichernutzung ist für eine gute Performance unerlässlich. Spark verwendet Speicher hauptsächlich zur Speicherung und Ausführung. Der Speicher wird zum Zwischenspeichern von Daten verwendet, die später wiederverwendet werden. Andererseits wird der Ausführungsspeicher für Berechnungen bei Shuffles, Sortierungen, Joins und Aggregationen verwendet. Speicherkonflikte stellen Apache Spark vor drei Herausforderungen:

  • Wie kann der Speicher zwischen Ausführung und Speicherung aufgeteilt werden?
  • Wie kann der Speicher auf mehrere Aufgaben aufgeteilt werden, die gleichzeitig ausgeführt werden?
  • Wie kann der Speicher auf Operatoren aufgeteilt werden, die innerhalb desselben Tasks ausgeführt werden?

Anstatt die statische Speicherreservierung im Voraus zu vermeiden, können Sie auftretende Speicherkonflikte beheben, indem Sie Mitglieder zum Spill zwingen.
 

Zusätzliche Ressourcen

Zurück zum Glossar