Direkt zum Hauptinhalt

Was ist Spark Tuning?

Die systematische Optimierung von Apache Spark-Konfigurationen, Speichernutzung und Ausführungsstrategien zur Maximierung der Leistung bei gleichzeitiger Vermeidung von Ressourcenengpässen.

4 Personas Analytics AIBI

Summary

  • Spark-Tuning passt die Speicherzuweisung zwischen Speicher und Ausführung an, verwaltet die Datenserialisierung für eine bessere Netzwerkperformance und optimiert Shuffle-Partitionen, um kostspieliges Auslagern auf die Festplatte zu vermeiden.
  • Adaptive Query Execution (AQE) findet automatisch optimale Shuffle-Partitionen und behebt Datenungleichgewichte, während der Cost-Based Optimizer (CBO) Tabellenstatistiken verwendet, um effiziente Join-Strategien auszuwählen.
  • Zu den fortgeschrittenen Techniken gehören Broadcast-Joins für kleine Tabellen, Predicate Pushdown zur Reduzierung des Datentransfers und die sorgfältige Verwaltung von Cache- und Festplattenspeicher für wiederholte Datenzugriffe.

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.
5-FACHER LEADER

Gartner®: Databricks als Leader für Cloud-Datenbanken

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

Verpassen Sie keinen Beitrag von Databricks

Abonnieren Sie unseren Blog und erhalten Sie die neuesten Beiträge direkt in Ihren Posteingang.