Automatisches Skalieren von Apache Spark-Pools in Azure Synapse Analytics
Mit der Funktion für automatische Skalierung in Apache Spark für Azure Synapse Analytics-Pools wird die Anzahl der Knoten in einer Clusterinstanz automatisch zentral hoch- oder herunterskaliert. Während der Erstellung eines neuen Pools für Apache Spark für Azure Synapse Analytics kann bei Auswahl der automatischen Skalierung eine minimale und maximale Anzahl von Knoten (bis zu 200 Knoten) festgelegt werden. Die automatische Skalierung überwacht dann die Ressourcenanforderungen der Auslastung und skaliert die Anzahl von Knoten zentral hoch oder herunter. Für dieses Feature fallen keine zusätzlichen Gebühren an.
Überwachen von Metriken
Die automatische Skalierung überwacht kontinuierlich die Spark-Instanz und sammelt die folgenden Metriken:
Metrik | BESCHREIBUNG |
---|---|
CPU insgesamt für ausstehende | Die Gesamtanzahl von Kernen, die zum Starten der Ausführung aller ausstehenden Aufträge erforderlich sind. |
Arbeitsspeicher insgesamt für ausstehende | Die Gesamtgröße des Arbeitsspeichers (in MB), die zum Starten der Ausführung aller ausstehenden Aufträge erforderlich ist. |
Freie CPUs insgesamt | Die Summe aller nicht verwendeten Kerne auf den aktiven Knoten. |
Freier Arbeitsspeicher insgesamt | Die Summe des nicht verwendeten Arbeitsspeichers (in MB) auf den aktiven Knoten. |
Verwendeter Arbeitsspeicher pro Knoten | Die Auslastung eines Knotens. Ein Knoten, auf dem 10 GB Arbeitsspeicher verwendet werden, ist höher ausgelastet als ein Knoten, auf dem 2 GB verwendet werden. |
Die oben aufgeführten Metriken werden alle 30 Sekunden überprüft. Die Autoskalierung trifft auf Basis dieser Metriken Entscheidungen zum zentralen Hoch- und Herunterskalieren.
Lastbasierte Skalierungsbedingungen
Wenn die folgenden Bedingungen erkannt werden, gibt die Autoskalierung eine Skalierungsanforderung aus:
Zentrales Hochskalieren | Zentrales Herunterskalieren |
---|---|
„CPU insgesamt für ausstehende“ ist länger als eine Minute größer als die Anzahl der insgesamt freien CPUs. | „CPU insgesamt für ausstehende“ ist länger als 2 Minuten kleiner als die Anzahl der insgesamt freien CPUs. |
„Arbeitsspeicher insgesamt für ausstehende“ ist länger als 1 Minute größer als der insgesamt freie Arbeitsspeicher. | „Arbeitsspeicher insgesamt für ausstehende“ ist länger als 2 Minuten kleiner als der insgesamt freie Arbeitsspeicher. |
Für das zentrale Hochskalieren berechnet der Azure Synapse-Autoskalierungsdienst, wie viele neue Knoten benötigt werden, um die aktuellen CPU- und Speicheranforderungen zu erfüllen, und gibt dann eine Anforderung für zentrales Hochskalieren aus, um die erforderliche Anzahl an Knoten hinzuzufügen.
Für das zentrale Herunterskalieren gibt die Autoskalierung basierend auf der Anzahl von Executors, Anwendungsmaster pro Knoten sowie den aktuellen CPU- und Arbeitsspeicheranforderungen eine Anforderung zum Entfernen einer bestimmten Anzahl von Knoten aus. Der Dienst erkennt auch, welche Knoten aufgrund der aktuellen Auftragsausführung für die Entfernung in Frage kommen. Der Vorgang des Herunterskalierens deaktiviert zunächst die Knoten und entfernt sie dann aus dem Cluster.
Hinweis
Ein Hinweis zum Aktualisieren und Erzwingen der Anwendung der Autoskalierungskonfiguration in einem vorhandenen Spark-Pool. Wenn im Azure-Portal oder ForceApplySetting
mit PowerShell die Option Neue Einstellung erzwingen aktiviert wurde, werden alle vorhandenen Spark-Sitzungen beendet und die Konfigurationsänderungen sofort angewandt. Wenn diese Option nicht aktiviert ist, wird die Konfiguration auf die neuen Spark-Sitzungen angewandt, und die vorhandenen Sitzungen werden nicht beendet.
Erste Schritte
Erstellen eines serverlosen Apache Spark-Pools mit automatischer Skalierung
Um die Funktion für automatische Skalierung zu aktivieren, führen Sie als Teil des normalen Poolerstellungsvorgangs die folgenden Schritte aus:
Aktivieren Sie auf der Registerkarte Grundlagen das Kontrollkästchen Automatische Skalierung aktivieren.
Geben Sie die gewünschten Werte für die folgenden Eigenschaften ein:
- Min. Anzahl von Knoten
- Max. Anzahl von Knoten
Die anfängliche Anzahl von Knoten ist der Minimalwert. Dieser Wert definiert die Anfangsgröße der Instanz bei der Erstellung. Die Mindestanzahl von Knoten darf nicht kleiner als drei sein.
Optional können Sie die dynamische Zuordnung von Executors in Szenarien aktivieren, in denen sich die Executoranforderungen in verschiedenen Phasen eines Spark-Auftrags stark unterscheiden oder die Menge der verarbeiteten Daten mit der Zeit schwankt. Durch Aktivieren der dynamischen Zuordnung von Executors kann die Kapazität nach Bedarf genutzt werden.
Das Aktivieren der dynamischen Zuordnung erlaubt dem Auftrag, die Anzahl der Executors innerhalb der angegebenen Mindest- und Höchstzahlen von Executors zu skalieren.
Apache Spark ermöglicht die Konfiguration der dynamischen Zuordnung von Executors über den folgenden Code:
%%configure -f
{
"conf" : {
"spark.dynamicAllocation.maxExecutors" : "6",
"spark.dynamicAllocation.enabled": "true",
"spark.dynamicAllocation.minExecutors": "2"
}
}
Die durch den Code angegebenen Standardwerte setzen die über die Benutzeroberfläche festgelegten Werte außer Kraft.
Wenn Ihr Auftrag in diesem Beispiel nur 2 Executors benötigt, werden auch nur 2 Executors verwendet. Wenn der Auftrag mehr Executors benötigt, wird er auf bis zu 6 Executors skaliert (1 Treiber, 6 Executors). Wenn der Auftrag die Executors nicht mehr benötigt, werden sie außer Betrieb genommen. Wenn der Knoten nicht benötigt wird, wird er freigegeben.
Hinweis
Mit „maxExecutors“ wird die Anzahl der konfigurierten Executors reserviert. Auf das Beispiel bezogen bedeutet dies, dass selbst bei Verwendung von nur 2 Executors 6 Executors reserviert werden.
Wenn Sie also die dynamische Zuteilung aktivieren, werden die Executors entsprechend der Auslastung der Executors hoch- oder herunterskaliert. Dadurch wird sichergestellt, dass die Executors entsprechend den Anforderungen des ausgeführten Auftrags bereitgestellt werden.
Bewährte Methoden
Berücksichtigen der Latenz von Vorgängen zum Hoch- bzw. Herunterskalieren
Es kann 1 bis 5 Minuten dauern, bis ein Skalierungsvorgang abgeschlossen ist.
Vorbereiten für das zentrale Herunterskalieren
Beim Herunterskalieren der Instanz werden die Knoten durch die automatische Skalierung in den Außerbetriebnahmezustand versetzt, sodass keine neuen Executors auf diesen Knoten gestartet werden können.
Die ausgeführten Aufträge werden weiterhin ausgeführt und abgeschlossen. Für die ausstehenden Aufträge wird auf die reguläre Einplanung mit weniger verfügbaren Knoten gewartet.
Hinweis
Standardmäßig ist „spark.yarn.executor.decommission.enabled“ auf TRUE festgelegt, sodass das nicht genutzte Knoten automatisch heruntergefahren werden, um die Computeeffizienz zu optimieren. Wenn eine weniger aggressive Herunterskalierung bevorzugt wird, kann diese Konfiguration auf FALSE festgelegt werden.
Nächste Schritte
Schnellstart zum Einrichten eines neuen Spark-Pools Erstellen eines Spark-Pools