In diesem Dokument finden Sie 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 die 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 von Serverless for Apache Spark V2
Mit dem Autoscaling von Serverless for Apache Spark Version 2 (V2) werden der Standardversion 1 (V1) Funktionen und Verbesserungen hinzugefügt, mit denen Sie Serverless for Apache Spark-Arbeitslasten verwalten, die Arbeitslastleistung verbessern und Kosten sparen können:
- Asynchrone Knotenskalierung nach unten: Beim Autoscaling V2 wird die synchrone Skalierung nach unten von V1 durch eine asynchrone Skalierung nach unten ersetzt. Bei der asynchronen Skalierung nach unten, skaliert Serverless for Apache Spark die Arbeitslastressourcen nach unten, ohne darauf zu warten, dass alle Knoten die Shuffle-Migration abgeschlossen haben. Das bedeutet, dass Knoten mit langer Ausführungszeit, die langsam herunterskaliert werden, die Skalierung nach oben nicht blockieren.
- Intelligente Knotenauswahl für die Skalierung nach unten: Beim Autoscaling V2 wird die zufällige Knotenauswahl von V1 durch einen intelligenten Algorithmus ersetzt, der die besten Knoten für die Skalierung nach unten zuerst identifiziert. Dieser Algorithmus berücksichtigt Faktoren wie die Größe der Shuffle-Daten des Knotens und die Leerlaufzeit.
- Konfigurierbare ordnungsgemäße Außerbetriebnahme von Spark und Shuffle-Migration: Mit dem Autoscaling V2 können Sie Standard-Spark-Attribute verwenden, um die ordnungsgemäße Außerbetriebnahme von Spark und die Shuffle-Migration zu konfigurieren. Mit dieser Funktion können Sie die Migrationskompatibilität mit Ihren benutzerdefinierten Spark-Attributen aufrechterhalten.
Funktionen des Autoscalings von Serverless for Apache Spark
| Funktion | Autoscaling von Serverless for Apache Spark V1 | Autoscaling von Serverless for Apache Spark V2 |
| Knotenskalierung nach unten | Synchron | Asynchron |
| Knotenauswahl für die Skalierung nach unten | 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 Zuordnung von Spark aufgeführt, die Sie beim Senden einer Batcharbeitslast festlegen können, um das Autoscaling zu steuern. Informationen zum Festlegen von Spark-Attributen finden Sie hier .
| Attribut | Beschreibung | Standard |
|---|---|---|
spark.dataproc.scaling.version |
Die Version des Autoscalings von Serverless for Apache Spark. Geben Sie
Version 1 oder 2 an (siehe
Autoscaling von Serverless for Apache Spark V2). |
1 |
spark.dynamicAllocation.enabled |
Gibt an, ob die dynamische Ressourcenzuweisung verwendet werden soll, die die Anzahl der Executors basierend auf der Arbeitslast nach oben und unten skaliert.
Wenn Sie den Wert auf false setzen, wird das Autoscaling
für die Arbeitslast deaktiviert. Standard: true. |
true |
spark.dynamicAllocation.initialExecutors |
Die anfängliche Anzahl der Executors, die der Arbeitslast zugewiesen wurden. Nach dem
Arbeitslast startet, kann das Autoscaling die Anzahl der aktiven Executors ändern.
Der Mindestwert ist 2, der Höchstwert 2000. |
2 |
spark.dynamicAllocation.minExecutors |
Die Mindestanzahl der Executors, auf die die Arbeitslast herunterskaliert werden soll.
Der Mindestwert ist 2. |
2 |
spark.dynamicAllocation.maxExecutors |
Die maximale Anzahl der Executors, auf die die Arbeitslast hochskaliert werden soll.
Der Höchstwert ist 2000. |
1000 |
spark.dynamicAllocation.executorAllocationRatio |
Passt die Skalierung der Spark-Arbeitslast nach oben an. Akzeptiert einen Wert von
0 bis 1. Ein Wert von 1.0
bietet maximale Skalierbarkeit nach oben und trägt dazu bei, maximale
Parallelität zu erreichen. Ein Wert von 0.5 legt die Skalierbarkeit nach oben und
die Parallelität auf die Hälfte des Höchstwerts fest. |
0.3 |
spark.reducer.fetchMigratedShuffle.enabled |
Wenn diese Option auf true gesetzt ist, kann der Shuffle-Ausgabespeicherort vom Spark-Treiber abgerufen werden, 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 zu aktiven Executors verursacht werden, und die Anzahl der Wiederholungen von Phasen, die
durch FetchFailedException
Fehler verursacht werden, wird reduziert (siehe
FetchFailedException caused by
ExecutorDeadException).
Dieses Attribut ist in den Serverless for Apache Spark
Spark-Laufzeit
versionen
1.1.12 und höher sowie 2.0.20 und höher verfügbar. |
false |
Messwerte für die dynamische Zuordnung von Spark
Spark-Batcharbeitslasten generieren die folgenden Messwerte im Zusammenhang mit der dynamischen Ressourcenzuweisung von Spark. Weitere Informationen zu Spark-Messwerten finden Sie unter Monitoring und Instrumentierung.
| Messwert | Beschreibung |
|---|---|
maximum-needed |
Die maximale Anzahl der 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 und Lösungen für die dynamische Zuordnung von Spark
FetchFailedException caused by 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 die Shuffle Ausgabe vom Speicherort abruft, der vom Spark-Treiber beim Start der Reducer-Aufgabe festgelegt wurde, kann der Reducer bei der Migration einer Shuffle-Datei weiterhin versuchen, die Shuffle-Ausgabe von einem außer Betrieb genommenen Executor abzurufen. Dies führt zu
ExecutorDeadExceptionundFetchFailedExceptionFehlern.Lösung: Aktivieren Sie das erneute Abrufen des Shuffle-Speicherorts, indem Sie das
spark.reducer.fetchMigratedShuffle.enabledauftruesetzen, wenn Sie Ihre Serverless for Apache Spark-Batcharbeitslast ausführen (siehe Attribute für Spark-Batcharbeitslasten festlegen). Wenn dieses Attribut aktiviert ist, ruft die Reducer-Aufgabe den Speicherort der Shuffle-Ausgabe nach einem fehlgeschlagenen Abruf von einem außer Betrieb genommenen Executor erneut vom Treiber ab.