Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Verwaltung virtueller Cluster
Ein virtueller Cluster ist ein Kubernetes-Namespace, mit dem Amazon EMR registriert ist. Sie können virtuelle Cluster erstellen, beschreiben, auflisten und löschen. Cluster verbrauchen keine zusätzlichen Ressourcen in Ihrem System. Ein einzelner virtueller Cluster wird einem einzelnen Kubernetes-Namespace zugeordnet. Auf der Grundlage dieser Beziehung können Sie virtuelle Cluster auf die gleiche Weise modellieren wie Kubernetes-Namespaces, damit sie Ihren Anforderungen entsprechen. Mögliche Anwendungsfälle finden Sie in der Dokumentation Konzepte-Übersicht für Kubernetes
Um Amazon EMR mit einem Kubernetes-Namespace auf einem Amazon-EKS-Cluster zu registrieren, benötigen Sie den Namen des EKS-Clusters und den Namespace, der für die Ausführung Ihres Workloads eingerichtet wurde. Diese registrierten Cluster in Amazon EMR werden als virtuelle Cluster bezeichnet, da sie keine physische Rechenleistung oder Speicherung verwalten, sondern auf einen Kubernetes-Namespace verweisen, in dem Ihr Workload geplant ist.
Anmerkung
Bevor Sie einen virtuellen Cluster erstellen, müssen Sie zunächst die Schritte 1-8 unter Einrichten von Amazon EMR in EKS ausführen.
Topics
Erstellen eines virtuellen Clusters
Führen Sie den folgenden Befehl aus, um einen virtuellen Cluster zu erstellen, indem Sie Amazon EMR mit einem Namespace auf einem EKS-Cluster registrieren. virtual_cluster_nameErsetzen Sie durch einen Namen, den Sie für Ihren virtuellen Cluster angeben. eks_cluster_nameErsetzen Sie es durch den Namen des EKS-Clusters. Ersetzen Sie den durch den Namespace, namespace_name mit dem Sie Amazon EMR registrieren möchten.
aws emr-containers create-virtual-cluster \ --namevirtual_cluster_name\ --container-provider '{ "id": "eks_cluster_name", "type": "EKS", "info": { "eksInfo": { "namespace": "namespace_name" } } }'
Alternativ können Sie eine JSON-Datei erstellen, die die erforderlichen Parameter für den virtuellen Cluster enthält, wie das folgende Beispiel zeigt.
{ "name": "virtual_cluster_name", "containerProvider": { "type": "EKS", "id": "eks_cluster_name", "info": { "eksInfo": { "namespace": "namespace_name" } } } }
Führen Sie dann den folgenden create-virtual-cluster-Befehl mit dem Pfad zur JSON-Datei aus.
aws emr-containers create-virtual-cluster \ --cli-input-jsonfile://./create-virtual-cluster-request.json
Anmerkung
Um die erfolgreiche Erstellung eines virtuellen Clusters zu überprüfen, zeigen Sie den Status der virtuellen Cluster an, indem Sie den Befehl list-virtual-clusters ausführen oder die Seite Virtuelle Cluster in der Amazon-EMR-Konsole aufrufen.
Virtuelle Cluster auflisten
Führen Sie den folgenden Befehl aus, um den Status virtueller Cluster anzuzeigen.
aws emr-containers list-virtual-clusters
Einen virtuellen Cluster beschreiben
Führen Sie den folgenden Befehl aus, um weitere Informationen zu einem virtuellen Cluster wie Namespace, Status und Registrierungsdatum abzurufen. Ersetzen Sie es 123456 durch Ihre virtuelle Cluster-ID.
aws emr-containers describe-virtual-cluster --id123456
Einen virtuellen Cluster löschen
Führen Sie den folgenden Befehl aus, um einen virtuellen Cluster zu löschen. 123456Ersetzen Sie durch Ihre virtuelle Cluster-ID.
aws emr-containers delete-virtual-cluster --id123456
Status des virtuellen Clusters
Die folgende Tabelle beschreibt die vier möglichen Zustände eines virtuellen Clusters.
State |
Description |
|---|---|
|
|
Der virtuelle Cluster befindet sich im RUNNING Status. |
|
|
Die angeforderte Beendigung des virtuellen Clusters ist im Gange. |
|
|
Die angeforderte Beendigung ist abgeschlossen. |
|
|
Die angeforderte Beendigung ist aufgrund unzureichender Berechtigungen fehlgeschlagen. |
Grenzwerte für gleichzeitige Jobs für virtuelle Cluster
Sie können Grenzwerte für gleichzeitige Jobs auf einem Amazon EMR auf einem virtuellen EKS-Cluster konfigurieren, um zu steuern, wie viele Auftragsläufe gleichzeitig ausgeführt werden und wie viele in der Warteschlange warten können. Sie legen das Limit für die Parallelität (maxConcurrentJobRuns) und die Warteschlangentiefe (maxInQueueJobRuns) unabhängig voneinander fest, sodass Sie laufende Auftragsausführungen, Auftragsausführungen in der Warteschlange oder beides begrenzen können. Wenn Sie diese Grenzwerte festlegen, sorgt die StartJobRun API für Gegendruck auf der Ebene des virtuellen Clusters. Der Auftrag wird über das Ausführungslimit hinaus ausgeführt. Warten Sie in der Warteschlange im PENDING Status SUBMITTED oder, anstatt sofort zu starten. Sobald die Warteschlange voll ist, werden weitere StartJobRun Übermittlungen abgelehnt. Wenn Sie beispielsweise einen virtuellen Cluster so einrichten, dass er 500 gleichzeitige Auftragsausführungen und 100 Auftragsausführungen in der Warteschlange zulässt, wird die 101. Einreichung in der Warteschlange abgelehnt, und Sie können diese Arbeitslast auf andere virtuelle Cluster auf demselben EKS-Cluster verteilen oder Kapazität hinzufügen. Wenn Sie kein Parallelitätslimit festgelegt haben und die Warteschlangentiefe ständig zunimmt, sodass Auftragsausführungen länger im PENDING Status SUBMITTED oder bleiben, bevor sie starten, kann dies darauf hinweisen, dass dem zugrunde liegenden EKS-Cluster die Rechenressourcen ausgehen und neue Pods nicht schnell genug geplant werden können. In diesem Fall leiten Sie die Arbeitslast an einen anderen Cluster weiter oder fügen Sie Kapazität hinzu.
Gleichzeitige Joblimits fügen dem Kubernetes-Scheduler und der ResourceQuota StartJobRun, bevor irgendwelche Pods erstellt werden, wird überschüssige Last an der API in die Warteschlange gestellt oder abgewiesen, wodurch der zugrunde liegende Cluster geschützt wird, bevor Jobs ihn überhaupt erreichen. Kubernetes erzwingt immer noch die tatsächliche CPU- und Speicherobergrenze, die darunter liegt.
Hauptvorteile gleichzeitiger Joblimits
-
Beugt einer Noisy-Neighbor-Überlastung vor — Begrenzt die Anzahl der ausgeführten und in der Warteschlange stehenden Jobausführungen pro virtuellem Cluster, sodass ein einzelner virtueller Cluster den gemeinsam genutzten EKS-Cluster nicht monopolisieren und Noisy-Neighbor-Scheduling-Fehler für andere virtuelle Cluster verursachen kann.
-
Aktiviert Traffic-Shaping — Gibt eine sofortige Ablehnung zurück, wenn die Warteschlange eines virtuellen Clusters voll ist, sodass Sie Eingaben an andere virtuelle Cluster umleiten können, anstatt einen einzelnen virtuellen Cluster zu überlasten.
-
Sorgt für Transparenz — Gibt alle 5 Minuten die Werte pro virtuellem Cluster
JobsRunningund dieJobsInQueueCloudWatch Metriken imAWS/EMRContainersNamespace für aktive und in der Warteschlange ausgeführte Aufträge aus. Dadurch erhalten Sie ein Integritätssignal für die Planung.
Erste Schritte mit Limits für gleichzeitige Jobs
Sie konfigurieren Limits für gleichzeitige Jobs mit dem schedulerConfiguration Feld in einem virtuellen Cluster. Dieses Feld akzeptiert zwei Parameter:
maxConcurrentJobRuns-
Die maximale Anzahl von Auftragsausführungen, die sich zu einem beliebigen Zeitpunkt im
RUNNINGStatus befinden können. maxInQueueJobRuns-
Die maximale Anzahl von Auftragsausführungen, die sich zu einem beliebigen Zeitpunkt im
SUBMITTEDStatusPENDINGOR (Warteschlangentiefe) befinden können.
AWS CLI
Um beim Erstellen eines virtuellen Clusters Grenzwerte festzulegen, geben Sie dies schedulerConfiguration in Ihrer Anfrage an.
aws emr-containers create-virtual-cluster \ --namemy-virtual-cluster\ --container-provider '{ ... }' \ --scheduler-configuration '{ "maxConcurrentJobRuns": 500, "maxInQueueJobRuns": 100 }'
Verwenden Sie den update-virtual-cluster Befehl, um die Grenzwerte für einen vorhandenen virtuellen Cluster zu ändern.
aws emr-containers update-virtual-cluster \ --idvirtual-cluster-id\ --scheduler-configuration '{ "maxConcurrentJobRuns": 500, "maxInQueueJobRuns": 100 }'
Um die Grenzwerte für einen virtuellen Cluster zu entfernen, geben Sie ein leeres Zeichen einschedulerConfiguration. Dadurch wird die Konfiguration gelöscht, sodass keine Beschränkungen gelten und der virtuelle Cluster zum Standardverhalten (unbegrenzt) zurückkehrt. Beachten Sie, dass die vorhandenen Grenzwerte stattdessen unverändert bleiben, wenn Sie sie in der Anfrage schedulerConfiguration weglassen — Sie müssen ein leeres Objekt übergeben, um sie zu löschen.
aws emr-containers update-virtual-cluster \ --idvirtual-cluster-id\ --scheduler-configuration '{}'
Verwenden Sie den Befehl, um die aktuellen Grenzwerte und die Anzahl der describe-virtual-cluster aktuellen Jobs anzuzeigen. Die Antwort umfasst schedulerConfiguration sowohl Ihr Objekt als auch ein SchedulerStatus Objekt mit dem aktuellen activeJobRunCount undinQueueJobRunCount.
Anmerkung
Wenn Sie eine Auftragsausführung an einen virtuellen Cluster senden, dessen Warteschlange voll ist, wird ein StartJobRun zurückgegebenValidationException.
Auswahl von Werten für Max ConcurrentJobRuns und Max InQueueJobRuns
Die richtigen Grenzwerte hängen von drei Dingen ab: wie viel Arbeit Ihr Amazon EKS-Cluster gleichzeitig ausführen kann, wie schnell Ihre Eingaben sind und wie sich der virtuelle Cluster verhalten soll, wenn er voll ist. Verwenden Sie die folgenden Anleitungen, um einen Startpunkt auszuwählen, und verfeinern Sie ihn dann anhand der Live-Counter.
Max. Einstellung ConcurrentJobRuns (laufende Slots)
maxConcurrentJobRunsist eine Leitplanke, die auf der Anzahl der Jobs basiert. Eine grobe Schätzung hier kann den zugrunde liegenden Amazon EKS-Cluster vor einer Beeinträchtigung aufgrund der Last schützen und die Verfügbarkeit verbessern.
-
Beginnen Sie mit der Kapazität geteilt durch den Platzbedarf pro Auftrag. Basieren Sie darauf, was jeder Job anfordert (Treiber, Executoren und Speicheraufwand), und setzen Sie auf etwa 70—80 Prozent Ihrer Namespace-Kapazität, um Spielraum für Treiber-Overhead, Node-Scale-Up und Bursts zu lassen.
-
Geben Sie für jeden Auftrag eine Obergrenze ein (Dimensionierung). T-shirt Binden Sie jeden Auftrag an einige wenige Größen ein
spark.dynamicAllocation.maxExecutorsund standardisieren Sie diese — z. B. „Klein“ (20 Ausführende), „Mittel“ (100) und „Groß“ (ca. 500) —, sodassmaxConcurrentJobRunsmultipliziert mit der Obergrenze vorhersehbar die Kapazität ermittelt wird, anstatt zu viel oder zu wenig für einen variablen Durchschnitt bereitzustellen. Für eine möglichst saubere Berechnung leiten Sie jede Größenklasse an ihren eigenen virtuellen Cluster weiter. -
Hören Sie von Live-Countern aus. Fangen Sie konservativ an und erhöhen Sie den Wert schrittweise, während Sie die
JobsRunningMetrik imAWS/EMRContainersNamespace beobachtenactiveJobRunCount.
Max InQueueJobRuns (Warteschlangentiefe) einstellen
maxInQueueJobRunssteuert, wie groß der Rückstand ist, den der virtuelle Cluster akzeptiert, bevor er anfängt, Einreichungen abzulehnen. Es ist ein Burst-Absorptionspuffer. Berücksichtigen Sie die folgenden Faktoren.
-
Burst-Profil — Passen Sie die Größe der Warteschlange so an, dass sie die Submissions-Bursts aufnehmen kann, die über Ihrer aktuellen Rate liegen. Wenn bei geplanten Pipelines viele Jobs gleichzeitig abgefeuert werden, verhindert eine tiefere Warteschlange, dass unberechtigte Ablehnungen vorgenommen werden. Legen Sie für die Tiefe Ihre erwartete Burst-Größe und nicht ein festes Vielfaches von zugrunde
maxConcurrentJobRuns, und überprüfen Sie sie anhand des nachfolgenden Grenzwerts für die Abflusszeit. -
Zulässige Wartezeit — Jobs in der Warteschlange warten, bis ein laufender Slot frei wird. Der Job, der sich am Ende einer vollen Warteschlange befindet, wartet ungefähr auf die Warteschlangentiefe geteilt durch den Abschlussdurchsatz. Wenn beispielsweise Jobs mit N pro Minute abgeschlossen werden und Q in der Warteschlange steht, wartet das Ende etwa Q geteilt durch N Minuten. Halten Sie sich dabei an Ihr SLA. Da gepufferte Jobs nach 30 Minuten fehlschlagen, wenn kein Slot frei wird, sollten Sie die Größe so
maxInQueueJobRunsklein halten, dass eine volle Warteschlange bei gleichbleibender Abschlussrate innerhalb von 30 Minuten voll ist. Andernfalls kommt es zu einer Zeitüberschreitung bei Aufträgen in der Warteschlange. -
Gegendruck im Vergleich zur Pufferung — Eine tiefere Warteschlange glättet zwar die Bursts, verzögert aber das Zurückweisen voller Warteschlangen, das Sie für das Traffic-Shaping verwenden, und erhöht die Latenz am Ende. Eine flachere Warteschlange schlägt schnell fehl, was den Kunden ein frühzeitiges, umsetzbares Signal gibt, es erneut zu versuchen oder an eine andere Stelle weiterzuleiten. Wählen Sie je nachdem, ob Sie es vorziehen, die Last zu puffern oder zu löschen und umzuleiten.
-
Verhalten des Clients bei erneuten Versuchen — Wenn die Warteschlange voll ist, wird ein
StartJobRunValidationExceptionzurückgegeben. Stellen Sie sicher, dass Ihre Absender diese Ausnahme behandeln. Versuchen Sie es erneut mit Backoff oder leiten Sie die Arbeitslast an einen anderen virtuellen Cluster weiter. Stellen Sie die Tiefe so ein, dass Ablehnungen nur bei echter Überlastung und nicht während des Routinebetriebs auftreten.
Überlegungen zu Grenzwerten für gleichzeitige Arbeitsaufträge
-
Standardmäßig werden keine Limits angewendet. Bestehende virtuelle Cluster und Workloads sind nicht betroffen, es sei denn, Sie legen dies ausdrücklich fest.
schedulerConfiguration -
Da die Leistungsindikatoren in einem verteilten System verwaltet werden, ist manchmal ein kleines vorübergehendes Delta vom tatsächlichen Wert zu erwarten. Durch den internen Abgleich werden Abweichungen korrigiert.