Dieses Dokument enthält Informationen zum Autoscaling von Google Cloud Serverless for Apache Spark. Wenn Sie Ihre Spark-Arbeitslast senden, kann Serverless for Apache Spark die Arbeitslastressourcen wie die Anzahl der Executors dynamisch skalieren, um Ihre Arbeitslast effizient auszuführen. Das Autoscaling von Serverless for Apache Spark ist das Standardverhalten und verwendet die dynamische Ressourcenzuweisung von Spark, um zu bestimmen, ob, wie und wann Ihre Arbeitslast skaliert werden soll.
Autoscaling V2 für Serverless for Apache Spark
Mit der Autoscaling-Version 2 (V2) für Serverless for Apache Spark werden Funktionen und Verbesserungen gegenüber der Standardversion 1 (V1) eingeführt, mit denen Sie Serverless for Apache Spark-Arbeitslasten verwalten, die Arbeitslastleistung verbessern und Kosten sparen können:
- Asynchrone Knotenskalierung: Bei Autoscaling V2 wird die synchrone Skalierung von V1 durch asynchrone Skalierung ersetzt. Beim asynchronen Herunterskalieren werden die Ressourcen von Serverless for Apache Spark-Arbeitslasten herunterskaliert, ohne darauf zu warten, dass die Shuffle-Migration auf allen Knoten abgeschlossen ist. Das bedeutet, dass Longtail-Knoten, die langsam skaliert werden, die Aufwärtsskalierung nicht blockieren.
- Intelligente Auswahl von Knoten zum Herunterskalieren: Bei Autoscaling V2 wird die zufällige Knotenauswahl von V1 durch einen intelligenten Algorithmus ersetzt, der die besten Knoten zum Herunterskalieren ermittelt. Bei diesem Algorithmus werden Faktoren wie die Größe der Shuffle-Daten des Knotens und die Leerlaufzeit berücksichtigt.
- Konfigurierbares Verhalten bei der ordnungsgemäßen Stilllegung von Spark und der Migration von Shuffle-Daten: Mit Autoscaling V2 können Sie Standard-Spark-Attribute verwenden, um die ordnungsgemäße Stilllegung von Spark und die Migration von Shuffle-Daten zu konfigurieren. Mit dieser Funktion können Sie die Migrationskompatibilität mit Ihren benutzerdefinierten Spark-Attributen aufrechterhalten.
Autoscaling-Funktionen für Serverless for Apache Spark
| Funktion | Serverless for Apache Spark-Autoscaling V1 | Serverless for Apache Spark Autoscaling V2 |
| Herunterskalieren von Knoten | Synchron | Asynchron |
| Knotenauswahl für das Herunterskalieren | Zufällig | Intelligent |
| Ordnungsgemäße Außerbetriebnahme von Spark und Shuffle-Migration | Nicht konfigurierbar | Konfigurierbar |
Attribute für die dynamische Zuordnung von Spark
In der folgenden Tabelle sind die Attribute für die dynamische Spark-Zuweisung aufgeführt, die Sie beim Einreichen einer Batcharbeitslast festlegen können, um die automatische Skalierung zu steuern (Spark-Attribute festlegen).
| Attribut | Beschreibung | Standard |
|---|---|---|
spark.dataproc.scaling.version |
Die Version von Serverless for Apache Spark-Autoscaling. Geben Sie die Version 1 oder 2 an (siehe Serverless for Apache Spark-Autoscaling V2). |
1 |
spark.dynamicAllocation.enabled |
Ob die dynamische Ressourcenzuweisung verwendet werden soll, bei der die Anzahl der Executors basierend auf der Arbeitslast skaliert wird.
Wenn Sie den Wert auf false festlegen, wird das Autoscaling für die Arbeitslast deaktiviert. Standardeinstellung: true |
true |
spark.dynamicAllocation.initialExecutors |
Die anfängliche Anzahl von Executors, die der Arbeitslast zugewiesen werden. Nach dem Start des Arbeitslast kann die Anzahl der aktiven Executors durch Autoscaling geändert werden.
Der Mindestwert ist 2 und der Höchstwert 2000. |
2 |
spark.dynamicAllocation.minExecutors |
Die Mindestanzahl von Executors, auf die die Arbeitslast herunterskaliert werden soll.
Der Mindestwert beträgt 2. |
2 |
spark.dynamicAllocation.maxExecutors |
Die maximale Anzahl von Executors, auf die die Arbeitslast skaliert werden soll.
Der Höchstwert beträgt 2000. |
1000 |
spark.dynamicAllocation.executorAllocationRatio |
Passt das Hochskalieren der Spark-Arbeitslast an. Akzeptiert einen Wert von 0 bis 1. Ein Wert von 1.0 bietet maximale Skalierbarkeit und hilft, maximale Parallelität zu erreichen. Ein Wert von 0.5 legt die Skalierbarkeit und Parallelität auf die Hälfte des Maximalwerts fest. |
0.3 |
spark.reducer.fetchMigratedShuffle.enabled |
Wenn diese Option auf true gesetzt ist, wird der Speicherort der Shuffle-Ausgabe vom Spark-Treiber abgerufen, nachdem ein Abruf von einem Executor fehlgeschlagen ist, der aufgrund der dynamischen Zuordnung von Spark außer Betrieb genommen wurde. Dadurch werden ExecutorDeadException-Fehler reduziert, die durch die Migration von Shuffle-Blöcken von außer Betrieb genommenen Executors zu aktiven Executors verursacht werden, und die Anzahl der Wiederholungsversuche von Phasen, die durch FetchFailedException-Fehler verursacht werden, wird verringert (siehe FetchFailedException caused by ExecutorDeadException).
Diese Eigenschaft ist in Serverless for Apache Spark-Spark-Laufzeitversionen
1.1.12 und höher sowie 2.0.20 und höher verfügbar. |
false |
Messwerte für die dynamische Zuordnung von Spark
Bei Spark-Batcharbeitslasten werden die folgenden Messwerte für die dynamische Ressourcenzuweisung von Spark generiert. Weitere Informationen zu Spark-Messwerten finden Sie unter Monitoring und Instrumentierung.
| Messwert | Beschreibung |
|---|---|
maximum-needed |
Die maximale Anzahl von Executors, die unter der aktuellen Last erforderlich sind, um alle laufenden und ausstehenden Aufgaben zu erfüllen. |
running |
Die Anzahl der laufenden Executors, die Aufgaben ausführen. |
Probleme mit der dynamischen Zuordnung von Spark und Lösungen
FetchFailedException aufgrund von ExecutorDeadException
Ursache: Wenn die dynamische Zuordnung von Spark einen Executor herunterskaliert, wird die Shuffle-Datei zu aktiven Executors migriert. Da die Spark-Reducer-Aufgabe auf einem Executor jedoch Shuffle-Ausgabe von dem Ort abruft, der vom Spark-Treiber beim Start der Reducer-Aufgabe festgelegt wurde, kann der Reducer weiterhin versuchen, Shuffle-Ausgabe von einem außer Betrieb genommenen Executor abzurufen, wenn eine Shuffle-Datei migriert wird. Dies führt zu
ExecutorDeadException- undFetchFailedException-Fehlern.Lösung: Aktivieren Sie das erneute Abrufen des Shuffle-Standorts, indem Sie
spark.reducer.fetchMigratedShuffle.enabledauftruesetzen, wenn Sie Ihre Serverless for Apache Spark-Batcharbeitslast ausführen (siehe Eigenschaften von Spark-Batcharbeitslasten festlegen). Wenn diese Eigenschaft aktiviert ist, ruft die Reducer-Aufgabe den Speicherort der Shuffle-Ausgabe vom Treiber neu ab, nachdem ein Abruf von einem außer Betrieb genommenen Executor fehlgeschlagen ist.