Dataproc Serverless für Spark-Autoscaling

Dieses Dokument enthält Informationen zum Autoscaling von Dataproc Serverless für Spark. Wenn Sie Ihre Spark-Arbeitslast einreichen, kann Dataproc Serverless for Spark die Arbeitslastressourcen wie die Anzahl der Executors dynamisch skalieren, um die Arbeitslast effizient auszuführen. Das Dataproc Serverless-Autoscaling ist das Standardverhalten. Dabei wird die dynamische Ressourcenzuweisung von Spark verwendet, um zu bestimmen, ob, wie und wann die Arbeitslast skaliert werden soll.

Dataproc Serverless-Autoscaling V2

Die Version 2 (V2) des Dataproc Serverless-Autoscalings bietet Funktionen und Verbesserungen gegenüber der Standardversion 1 (V1), mit denen Sie Dataproc Serverless-Arbeitslasten verwalten, die Arbeitslastleistung verbessern und Kosten sparen können:

  • Asynchrone Knotenverkleinerung: Beim Autoscaling V2 wird die synchrone Verkleinerung von V1 durch eine asynchrone Verkleinerung ersetzt. Mit dem asynchronen Downscaling werden die Arbeitslastressourcen in Dataproc Serverless herunterskaliert, ohne dass auf die Fertigstellung der Zufallsmix-Migration aller Knoten gewartet werden muss. Das bedeutet, dass Long-Tail-Knoten, die langsam herunterskaliert werden, das Upscaling nicht blockieren.
  • Intelligente Auswahl der Knoten zum Herunterskalieren: Bei Autoscaling V2 wird die zufällige Knotenauswahl von V1 durch einen intelligenten Algorithmus ersetzt, der die besten Knoten zum Herunterskalieren zuerst identifiziert. Dieser Algorithmus berücksichtigt Faktoren wie die Größe der Zufallsmix-Daten und die Inaktivitätsdauer des Knotens.
  • Konfiguration des Spark-Verhaltens bei Graceful Decommissioning und Zufallsmix-Migration: Mit der automatischen Skalierung V2 können Sie mithilfe von Standard-Spark-Properties die Graceful Decommissioning und die Zufallsmix-Migration von Spark konfigurieren. Mit dieser Funktion können Sie die Migrationskompatibilität mit Ihren benutzerdefinierten Spark-Properties aufrechterhalten.

Autoscaling-Funktionen von Dataproc Serverless

Funktion Dataproc Serverless Autoscaling V1 Dataproc Serverless Autoscaling V2
Knoten-Downscaling Synchron Asynchron
Knotenauswahl für die Downscaling-Funktion Zufällig Intelligent
Ordnungsgemäße Außerbetriebnahme und Zufallsmix-Migration für Spark Nicht konfigurierbar Konfigurierbar

Spark-Eigenschaften für die dynamische Zuordnung

In der folgenden Tabelle sind die Eigenschaften der dynamischen Spark-Zuordnung aufgeführt, die Sie beim Einreichen einer Batcharbeitslast festlegen können, um die automatische Skalierung zu steuern. Weitere Informationen finden Sie unter Spark-Eigenschaften festlegen.

Attribut Beschreibung Standard
spark.dataproc.scaling.version Die Dataproc Serverless Spark-Autoscaling-Version. Geben Sie Version 1 oder 2 an (siehe Dataproc Serverless-Autoscaling V2). 1
spark.dynamicAllocation.enabled Ob die dynamische Ressourcenzuweisung verwendet werden soll, bei der die Anzahl der Executors basierend auf der Arbeitslast hoch- und herunterskaliert 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 der Executors, die der Arbeitslast zugewiesen sind. Nach dem Start der Arbeitslast kann die Anzahl der aktiven Executors durch das Autoscaling geändert werden. Der Mindestwert ist 2 und der maximale Wert 500. 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 die Skalierung der Spark-Arbeitslast an. Die Werte 0 bis 1 sind zulässig. Ein Wert von 1.0 bietet maximale Skalierungsfunktionen und trägt dazu bei, maximale Parallelität zu erreichen. Bei einem Wert von 0.5 werden die Skalierungsfunktionen und die Parallelität auf die Hälfte des Maximalwerts festgelegt. 0.3
spark.reducer.fetchMigratedShuffle.enabled Wenn dieser Parameter auf true gesetzt ist, wird der Speicherort der Zufallsmix-Ausgabe vom Spark-Treiber abgerufen, nachdem ein Abruf von einem Executor fehlgeschlagen ist, der aufgrund der dynamischen Zuordnung von Spark außer Betrieb gesetzt wurde. Dadurch werden ExecutorDeadException-Fehler reduziert, die durch die Migration von Zufallsblocken von stillgelegten Ausführenden zu aktiven Ausführenden verursacht werden, und die Anzahl der Wiederholungen von Phasen, die durch FetchFailedException-Fehler verursacht werden. Weitere Informationen finden Sie unter FetchFailedException caused by ExecutorDeadException (Fehler „FetchFailedException“ aufgrund von „ExecutorDeadException“). Diese Eigenschaft ist in den Spark-Laufzeitversionen von Dataproc Serverless 1.1.12 und höher sowie 2.0.20 und höher verfügbar. false

Messwerte für die dynamische Zuordnung in Spark

Bei Spark-Batch-Arbeitslasten werden die folgenden Messwerte zur dynamischen 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 bei der aktuellen Auslastung erforderlich sind, um alle laufenden und ausstehenden Aufgaben zu bearbeiten.
running Die Anzahl der laufenden Executors, die Aufgaben ausführen.

Probleme mit der dynamischen Zuordnung in Spark und Lösungen

  • FetchFailedException caused by ExecutorDeadException

    Ursache: Wenn bei der dynamischen Zuordnung von Spark ein Executor herunterskaliert wird, wird die Zufallsmixdatei zu aktiven Executoren migriert. Da die Spark-Reducer-Aufgabe auf einem Executor jedoch die Zufallsmix-Ausgabe vom Speicherort abholt, der vom Spark-Treiber beim Starten der Reducer-Aufgabe festgelegt wurde, kann der Reducer bei der Migration einer Zufallsmixdatei weiterhin versuchen, die Zufallsmix-Ausgabe von einem außer Betrieb gesetzten Executor abzurufen. Dies führt zu ExecutorDeadException- und FetchFailedException-Fehlern.

    Lösung: Aktivieren Sie das erneute Abrufen des Zufallsmix-Speicherorts, indem Sie spark.reducer.fetchMigratedShuffle.enabled auf true festlegen, wenn Sie Dataproc Serverless für die Spark-Batcharbeitslast ausführen (siehe Spark-Batcharbeitslast-Properties festlegen). Wenn diese Eigenschaft aktiviert ist, ruft die Reducer-Aufgabe den Speicherort der Zufallsmix-Ausgabe noch einmal vom Treiber ab, nachdem ein Abruf von einem außer Betrieb gesetzten Executor fehlgeschlagen ist.