Konfigurieren der Computeleistung
Das Konfigurieren von Computeressourcen umfasst das Ausgleichen der Leistungsanforderungen mit Kostenaspekten. Die Überbereitstellung führt zu unnötigen Ausgaben, während bei der Unterbereitstellung Stabilitätsprobleme und die langsame Ausführung von Abfragen verursachen können. Wenn Sie wissen, wie Sie Computeeinstellungen konfigurieren, können Sie Ressourcen für Ihre Workload optimieren.
Grundlegendes zu Computeressourcenkomponenten
Die Berechnungsleistung hängt von drei wichtigen Faktoren ab, die zusammenarbeiten. Jeder Faktor beeinflusst, wie effizient Ihre Workload läuft und wie viel sie kostet.
Gesamtausführerkerne bestimmen die maximale Parallelität, die für die Verarbeitung von Daten verfügbar ist. Weitere Kerne ermöglichen Spark, mehr Aufgaben gleichzeitig zu verarbeiten. Ein Cluster mit 8 Mitarbeitern mit jeweils 4 Kernen bietet insgesamt 32 Kerne für die parallele Verarbeitung.
Gesamter Ausführungsspeicher wirkt sich darauf aus, wie viele Daten vor dem Überlauf auf den Datenträger im Arbeitsspeicher verarbeitet werden können. Speicherintensive Vorgänge wie Verknüpfungen und Aggregationen profitieren von größeren Speicherkonfigurationen. Wenn arbeitsspeicherausläuft, schreibt Spark Daten auf den Datenträger, wodurch die Leistung erheblich verlangsamt wird.
Lokaler Speicher bietet temporären Speicherplatz für Shuffle-Vorgänge und Zwischenspeicherung. Während der Shuffle-Operationen schreibt Spark Zwischendaten auf lokale Festplatten der Arbeitsknoten. Schneller lokaler Speicher reduziert die für diese Vorgänge aufgewendete Zeit.
Mit diesem Verständnis von Computekomponenten können Sie fundierte Entscheidungen über Knotentypen und Clustergrößen treffen.
Konfigurieren von Knotentypen und Clustergrößen
Die Auswahl des Knotentyps wirkt sich direkt auf Leistung und Kosten aus. Verschiedene Instanzenfamilien dienen unterschiedlichen Workloadmerkmalen.
Speicheroptimierte Instanzen funktionieren gut für Workloads mit großen Verknüpfungen, Aggregationen oder Daten, die im Arbeitsspeicher bleiben müssen. Diese Instanzen bieten mehr RAM pro Kern und verringern die Wahrscheinlichkeit, dass Daten auf den Datenträger überlaufen. Beispiele hierfür sind E-Serien-VMs , die ein hohes Speicher-zu-Core-Verhältnis bieten, das ideal für in-Memory-Analysen geeignet ist.
Computeoptimierte Instanzen eignen sich für Workloads, die komplexe Berechnungen durchführen, aber keine großen Speichermengen erfordern. ETL-Aufträge mit einfachen Transformationen werden häufig effizient auf diesen Instanzen ausgeführt. Beispiele hierfür sind VMs der F-Serie , die eine hohe CPU-Leistung mit geringeren Arbeitsspeicherverhältnissen bieten.
Speicheroptimierte Instanzen profitieren von Arbeitslasten, die dieselben Daten wiederholt lesen oder schnellen zugriff auf lokale Datenträger erfordern. Datenanalyseworkloads mit aktivierter Zwischenspeicherung können mit diesen Instanzen besser ausgeführt werden. Beispiele hierfür sind VMs der L-Serie , die schnellen lokalen NVMe-Speicher für hohe E/A-Workloads bieten.
GPU-beschleunigte Instanzen bieten Grafikverarbeitungseinheiten, die für rechenintensive Workloads wie Maschinelles Lernen, Deep Learning und Bildverarbeitung entwickelt wurden. Diese Instanzen können die Modellschulung um 10-100x im Vergleich zu nur CPU-Clustern beschleunigen. Beispiele sind NC-Serie und VMs der ND-Serie mit NVIDIA GPUs. GPU-Instanzen erfordern Databricks Runtime ML und funktionieren am besten für Aufgaben wie das Trainieren neuraler Netzwerke, das Optimieren großer Sprachmodelle oder das Ausführen von Rückschlüssen auf komplexe Modelle.
Das Gleichgewicht zwischen Der Anzahl der Mitarbeiter und der Instanzengröße wirkt sich je nach Arbeitsauslastung unterschiedlich auf die Leistung aus. Zwei Mitarbeiter mit 16 Kernen und 128 GB RAM bieten jeweils den gleichen Berechnungs- und Arbeitsspeicher wie acht Worker mit jeweils 4 Kernen und 32 GB RAM. Jedoch reduziert die Konfiguration mit weniger, größeren Arbeitsprozessen den Netzwerkdatenverkehr während der Shuffle-Operationen, während mehr kleinere Arbeitsprozesse eine bessere Parallelität für hochverteilte Workloads bieten können.
Für analytische Arbeitslasten mit vielen Shuffle-Vorgängen sind weniger große Worker in der Regel besser geeignet. Für eine einfache Batchverarbeitung, die von hoher Parallelität profitiert, können kleinere Arbeitskräfte kostengünstiger sein.
Verwenden von flexiblen Knotentypen
Wenn Azure Databricks eine Computeressource startet, kann Ihr Cloudanbieter gelegentlich nicht mehr Kapazität für den angegebenen Instanztyp haben. Dies führt zu einem CLOUD_PROVIDER_RESOURCE_STOCKOUT Fehler, der die Ausführung des Auftrags ohne Warnung verzögern oder fehlschlagen kann.
Flexible Knotentypen adressieren dies, indem automatisch auf kompatible alternative Instanztypen zurückfallen, wenn der bevorzugte Typ nicht verfügbar ist. Kompatible Alternativen teilen die gleiche Anzahl an vCPUs, den Arbeitsspeicher (innerhalb von 100 bis 110%), die lokale Datenträgerkonfiguration, die CPU-Architektur und die Unterstützung für Betriebssystem-Images wie der primäre Instanztyp – um sicherzustellen, dass Ihre Workload unabhängig vom erworbenen Typ korrekt ausgeführt wird.
Arbeitsbereichsadministratoren aktivieren diese Funktionen, indem Sie Automatische flexible Knotentypen aktivieren in den Arbeitsbereichseinstellungen Compute des Administrators umschalten. Nach der Aktivierung verwenden alle neuen klassischen Computeressourcen automatisch Fallbackinstanztypen. Dies ist besonders nützlich für Spotinstanzen: Flexible Knotentypen können über mehrere kompatible Typen hinweg einen Kauf versuchen, bevor sie auf On-Demand zurückgreifen. Dadurch wird der Prozentsatz der genutzten Spotinstanzen erhöht und die Gesamtcomputekosten werden reduziert.
Für Workloads mit strengen Anforderungen an den Instanzentyp können Sie flexible Knotentypen für eine einzelne Rechenressource deaktivieren, indem Sie alternate_node_type_ids über die Cluster-API auf eine leere Liste setzen. Sie können auch eine benutzerdefinierte Fallbackliste über die API angeben, wenn Sie lieber steuern möchten, welche alternativen Typen verwendet werden, anstatt sich auf die automatische Auswahl zu verlassen.
Konfigurieren der automatischen Skalierung
Durch die automatische Skalierung wird die Anzahl der Mitarbeiter basierend auf Arbeitsauslastungsanforderungen angepasst, sodass Sie die Leistung bei der Kostenkontrolle beibehalten können.
Wenn Sie die automatische Skalierung aktivieren, legen Sie mindeste und maximale Arbeitsanzahl fest. Azure Databricks überwacht die Workloadanforderungen und fügt mitarbeiter bei Bedarf bis zum von Ihnen angegebenen Maximum hinzu. Wenn sich die Nachfrage verringert, werden die Arbeitnehmer bis zum Minimum entfernt.
Azure Databricks verwendet standardmäßig eine optimierte automatische Skalierung , wenn Sie die automatische Skalierung aktivieren. Optimierte automatische Skalierung wird schnell in zwei Schritten von minimal bis maximal skaliert. Es kann sogar dann herunterskaliert werden, wenn der Cluster nicht im Leerlauf ist, indem der Zustand der Shuffle-Datei überwacht wird. Bei der Auftragsberechnung wertet sie die Auslastung alle 40 Sekunden aus. Für die gesamte Berechnung überprüft sie alle 150 Sekunden.
Erwägen Sie die automatische Skalierung für Workloads mit variablen Ressourcenanforderungen während der gesamten Ausführung. Datenerkundungssitzungen beginnen häufig mit kleinen Datenstichproben und verarbeiten später größere Datensätze. Durch die automatische Skalierung werden Mitarbeiter hinzugefügt, wenn Sie die größeren Datasets verarbeiten und sie entfernen, wenn Sie zu kleineren Stichproben zurückkehren.
Für vorhersagbare Arbeitslasten, die eine konsistente Ressourcenauslastung beibehalten, bietet eine feste Anzahl von Mitarbeitern häufig stabilere Leistung und eine einfachere Kapazitätsplanung. Der Aufwand für Skalierungsentscheidungen kann sich leicht auf die Leistung für Arbeitslasten im stabilen Zustand auswirken.
Die automatische Skalierung eignet sich besonders gut für Instanzenpools. Setzen Sie Ihre Mindestanzahl an Workern gleich oder kleiner als die Mindestanzahl an Idle-Instanzen im Pool. Dadurch wird eine schnelle Skalierung sichergestellt, da die Instanzen bereits bereitgestellt und bereit sind.
Konfigurieren von Beendigungseinstellungen
Durch die automatische Beendigung wird verhindert, dass ungenutzte Compute-Ressourcen unnötige Kosten verursachen und gleichzeitig die Verfügbarkeit für geplante Workloads beibehalten.
Wenn Sie die automatische Beendigung konfigurieren, geben Sie einen Inaktivitätszeitraum in Minuten an. Wenn innerhalb dieses Zeitraums keine Befehle auf dem Cluster ausgeführt werden, beendet Azure Databricks den Cluster. Die Clusterkonfiguration bleibt bei Bedarf für den Neustart verfügbar.
Legen Sie für interaktive Workloads wie Datenanalyse den Beendigungszeitraum basierend auf typischen Sitzungsmustern fest. Ein 45-Minuten-Timeout eignet sich für die meisten Anwendungsfälle gut, sodass Datentechniker Zeit haben, ergebnisse zwischen Abfragen zu überprüfen, ohne Cluster stundenlang im Leerlauf zu lassen.
Bei der Auftragsberechnung erfolgt die automatische Beendigung nach Beendigung des Auftrags. Der Cluster wird automatisch gestartet, wenn die nächste geplante Ausführung beginnt, sodass Sie den Start nicht manuell verwalten müssen.
Spotinstanzen reduzieren die Kosten, gehen jedoch mit Verfügbarkeitskompromissen einher. Azure kann Spotinstanzen zurückfordern, wenn Kapazität an anderer Stelle benötigt wird. Bei Arbeitsknoten funktionieren Spotinstanzen gut, da Azure Databricks/Spark Arbeitsfehler behandeln kann. Verwenden Sie jedoch immer On-Demand-Instanzen für Treiberknoten. Wenn der Treiber erneut beansprucht wird, schlägt der gesamte Cluster fehl.
Aktivieren Sie decommissioning bei der Verwendung von Spot-Instanzen, um Aufgabenfehler zu reduzieren. Wenn eine Spot-Instanz eine Preemption Notice erhält, migriert die Stilllegung Shuffle- und Cache-Daten auf gesunde Worker, bevor die Instanz beendet wird. Dadurch wird die Notwendigkeit reduziert, verloren gegangene Daten neu zu kompensieren.
Verwenden von Instanzpools
Instanzpools verwalten eine Reihe von Leerlaufinstanzen, die sofort verwendet werden können, wodurch die Startzeit des Clusters von Minuten auf Sekunden reduziert wird.
Konfigurieren Sie die minimalen Leerlaufinstanzen so, dass sie Ihren typischen gleichzeitigen Clusteranforderungen entsprechen. Wenn Sie regelmäßig drei Notebooks gleichzeitig betreiben, sollten Sie mindestens drei Instanzen im Leerlauf betreiben. Diese Instanzen bleiben auch dann verfügbar, wenn sie nicht verwendet werden, und stellen den sofortigen Clusterstart bereit.
Legen Sie die maximale Kapazität fest, um Kosten zu steuern und zu verhindern, dass eine Workload alle verfügbaren Ressourcen verbraucht. Wenn mehrere Teams einen Arbeitsbereich gemeinsam nutzen, sorgen Pools mit maximalen Kapazitätseinstellungen für eine faire Ressourcenverteilung. Mit einem Kontingent von 100 Instanzen können Sie beispielsweise jeweils zwei Pools mit maximal 50 Instanzen für zwei Teams erstellen.
Die Einstellung zur automatischen Beendigung von Leerlaufinstanzen beendet Instanzen, die die erforderliche Mindestanzahl an Leerlaufinstanzen nach dem angegebenen Zeitraum überschreiten. Wenn Sie den minimalen Leerlauf auf 3 und die automatische Beendigung auf 30 Minuten festlegen, wird ein Pool, der bis zu 8 Instanzen skaliert, nach 30 Minuten Inaktivität wieder auf 3 Instanzen reduziert.
Durch das Vorabladen einer Databricks-Runtime-Version auf Poolinstanzen wird der Clusterstart noch weiter beschleunigt. Wenn Sie beim Erstellen eines Clusters die vorinstallierte Laufzeit auswählen, wird der Cluster fast sofort gestartet, da die Laufzeit bereits in Leerlaufinstanzen installiert ist.
Pools funktionieren am besten für Workloads mit häufigen Clustererstellungs- und Beendigungszyklen. Entwicklungsteams, die Cluster im Laufe des Tages erstellen und zerstören, sehen erhebliche Zeiteinsparungen. Produktionsaufträge, die auf dedizierten, lang laufenden Clustern ausgeführt werden, ziehen nicht so viele Vorteile aus Pools.
Kosten und Leistung ausgleichen
Um das richtige Gleichgewicht zwischen Kosten und Leistung zu erreichen, müssen Sie Ihre Workloadmerkmale verstehen und Konfigurationen entsprechend anpassen.
Beginnen Sie mit konservativen Einstellungen, und überwachen Sie die Leistung. Wenn häufiges Überlaufen auf datenträger oder langsame Abfrageausführung angezeigt wird, erhöhen Sie den Arbeitsspeicher oder die Kernanzahl. Wenn die Auslastung niedrig bleibt, verringern Sie die Clustergröße, oder aktivieren Sie die automatische Skalierung.
Hinweis
Verwenden Sie die Spark-Benutzeroberfläche , um Leistungsprobleme zu identifizieren. Schauen Sie sich die Jobs Timeline an, um lang laufende Phasen zu finden, und sehen Sie sich die Seite mit den Phasendetails für Spill-Statistiken an, wo Shuffle Spill (Memory) und Shuffle Spill (Disk) angezeigt werden. Vergleichen Sie Phasendauern, um Engpässe und langsame Abfragen zu identifizieren.
Verwenden Sie serverlose Berechnung, wenn Ihre Workload sie unterstützt. Serverless beseitigt Konfigurationsentscheidungen und skaliert automatisch basierend auf Bedarf, was häufig die beste Kosten-Leistungsbilanz ohne manuelle Optimierung bietet.
Regelmäßige Überwachung hilft Ihnen dabei, Optimierungsmöglichkeiten zu identifizieren. Überprüfen Sie Clustermetriken, um die tatsächliche Auslastung im Vergleich zur bereitgestellten Kapazität anzuzeigen. Passen Sie Knotentypen, Workeranzahlen oder Skalierungseinstellungen basierend auf beobachteten Mustern anstelle von Annahmen an.
Hinweis
Überwachung und Beobachtbarkeit werden in einem späteren Modul ausführlich behandelt.