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.
Erweiterte Konfiguration: Freigeben von Entwicklungsendpunkten unter mehreren Benutzern
In diesem Abschnitt wird erklärt, wie Sie in typischen Anwendungsfällen Entwicklungsendpunkte mit SageMaker Notebooks nutzen können, um Entwicklungsendpunkte für mehrere Benutzer gemeinsam zu nutzen.
Single-Tenancy-Konfiguration
Um die Entwicklererfahrung zu vereinfachen und Ressourcenkonflikte zu vermeiden, wird in Single-Tenant-Anwendungsfällen empfohlen, dass jeder Entwickler einen eigenen Entwicklungsendpunkt verwendet, der auf sein jeweiliges Projekt ausgerichtet ist. Dies vereinfacht auch die Entscheidungen zu Worker-Typ und DPU-Anzahl, da sie je nach Projekt und Ermessen des Entwicklers eingestellt werden können.
Solange Sie nicht mehrere Notebook-Dateien gleichzeitig ausführen, müssen Sie sich nicht um die Ressourcenzuweisung kümmern. Wenn Sie Code in mehreren Notebook-Dateien gleichzeitig ausführen, werden mehrere Livy-Sitzungen parallel gestartet. Um Spark-Cluster-Konfigurationen zu trennen, sodass mehrere Livy-Sitzungen gleichzeitig ausgeführt werden können, führen Sie die Schritte aus, die in Multi-Tenant-Anwendungsfällen eingeführt werden.
Wenn Ihr Entwicklungsendpunkt beispielsweise 10 Worker aufweist und der Worker-Typ
G.1X
ist, haben Sie 9 Spark-Executors und der gesamte Cluster hat 90G Executor-Speicher, da jeder Executor 10G Speicher haben wird.
Unabhängig vom angegebenen Worker-Typ wird die dynamische Ressourcenzuweisung von Spark aktiviert. Wenn ein Datensatz groß genug ist, kann Spark alle Executors einer einzelnen Livy-Sitzung zuweisen, da spark.dynamicAllocation.maxExecutors
nicht standardmäßig festgelegt ist. Das bedeutet, dass andere Livy-Sitzungen auf demselben Entwicklungsendpunkt warten, um neue Executors zu starten. Ist der Datensatz klein, können Executors mehreren Livy-Sitzungen gleichzeitig zugewiesen werden.
Anmerkung
Weitere Informationen dazu, wie Ressourcen in verschiedenen Anwendungsfällen zugewiesen werden und wie Sie eine Konfiguration festlegen, um das Verhalten zu ändern, finden Sie unter Erweiterte Konfiguration: Freigeben von Entwicklungsendpunkten unter mehreren Benutzern.
Multi-Tenancy-Konfiguration
Anmerkung
Bitte beachten Sie, dass Entwicklungsendpunkte das emulieren sollen AWS Glue ETL-Umgebung als Single-Tenant-Umgebung. Multi-Tenancy ist zwar möglich, ist jedoch ein erweiterter Anwendungsfall. In der Regel wird empfohlen, dass die Benutzer für jeden Entwicklungsendpunkt ein Single-Tenancy-Muster beibehalten.
In Multi-Tenant-Anwendungsfällen müssen Sie sich gegebenenfalls um die Ressourcenzuweisung kümmern. Der entscheidende Faktor ist die Anzahl der Benutzer, die ein Jupyter Notebook gleichzeitig verwenden. Wenn Ihr Team in einem "follow-the-sun" Workflow arbeitet und es in jeder Zeitzone nur einen Jupyter-Benutzer gibt, dann ist die Anzahl der gleichzeitigen Benutzer nur eins, sodass Sie sich keine Gedanken über die Ressourcenzuweisung machen müssen. Wird Ihr Notebook jedoch von mehreren Benutzern gemeinsam genutzt und jeder Benutzer reicht Code auf einer Ad-hoc-Basis ein, müssen Sie die folgenden Punkte berücksichtigen.
Um Spark-Cluster-Ressourcen auf mehrere Benutzer aufzuteilen, können Sie Konfigurationen verwenden. SparkMagic Es gibt zwei verschiedene Arten der Konfiguration SparkMagic.
(A) Verwenden der Anweisung %%configure -f
Wenn Sie die Konfiguration pro Livy-Sitzung des Notebooks ändern möchten, können Sie die Anweisung %%configure -f
für den Notebook-Abschnitt ausführen.
Soll beispielsweise eine Spark-Anwendung auf 5 Executors ausgeführt werden, können Sie für den Notebook-Abschnitt den folgenden Befehl ausführen.
%%configure -f {"numExecutors":5}
Sie sehen dann nur 5 Executors, die für den Auftrag in der Spark-Benutzeroberfläche ausgeführt werden.
Wir empfehlen, die maximale Anzahl von Executors für die dynamische Ressourcenzuweisung zu begrenzen.
%%configure -f {"conf":{"spark.dynamicAllocation.maxExecutors":"5"}}
(B) Ändern Sie die SparkMagic Konfigurationsdatei
SparkMagic funktioniert basierend auf der Livy-APIdriverMemory
,
driverCores
,executorMemory
,executorCores
,
numExecutors
conf
, usw. Dies sind die Schlüsselfaktoren, die bestimmen, wie viele Ressourcen vom gesamten Spark-Cluster verbraucht werden. SparkMagic ermöglicht es Ihnen, eine Konfigurationsdatei bereitzustellen, um die Parameter anzugeben, die an Livy gesendet werden. In diesem GitHub-Repository
Wenn Sie die Konfiguration für alle Livy-Sitzungen eines Notebooks ändern möchten, können Sie /home/ec2-user/.sparkmagic/config.json
anpassen, indem Sie session_config
hinzufügen.
Um die Konfigurationsdatei auf einer SageMaker Notebook-Instanz zu ändern, können Sie die folgenden Schritte ausführen.
-
Öffnen Sie ein SageMaker Notizbuch.
-
Öffnen Sie den Terminalkernel.
-
Führen Sie die folgenden Befehle aus:
sh-4.2$ cd .sparkmagic sh-4.2$ ls config.json logs sh-4.2$ sudo vim config.json
Sie können
/home/ec2-user/.sparkmagic/config.json
beispielsweise diese Zeilen hinzufügen und den Jupyter-Kernel des Notebooks neu starten."session_configs": { "conf": { "spark.dynamicAllocation.maxExecutors":"5" } },
Leitlinien und Bewährte Methoden
Um diesen Ressourcenkonflikt zu vermeiden, können Sie unter anderem diese grundlegenden Ansätze nutzen:
-
Vergrößern Sie den Spark-Cluster, indem Sie die
NumberOfWorkers
erhöhen (horizontale Skalierung) und denworkerType
upgraden (vertikale Skalierung). -
Weisen Sie weniger Ressourcen pro Benutzer zu (weniger Ressourcen pro Livy-Sitzung).
Ihr Ansatz hängt vom Anwendungsfall ab. Wenn Sie einen größeren Entwicklungsendpunkt haben und keine großen Datenmengen vorliegen, ist das Risiko eines Ressourcenkonflikts wesentlich geringer, da Spark Ressourcen basierend auf einer dynamischen Zuweisungsstrategie zuteilen kann.
Die Anzahl der Spark-Executors kann wie oben beschrieben anhand einer Kombination aus DPU (oder NumberOfWorkers
) und Worker-Typ automatisch berechnet werden. Jede Spark-Anwendung startet einen Treiber und mehrere Executors. Zur Berechnung muss Folgendes gegeben sein:
NumberOfWorkers
= NumberOfExecutors + 1
. In der folgenden Matrix wird erläutert, wie viel Kapazität Sie basierend auf der Anzahl der gleichzeitigen Benutzer in Ihrem Entwicklungsendpunkt benötigen.
Anzahl gleichzeitiger Notebook-Benutzer | Anzahl der Spark-Executors, die pro Benutzer zugewiesen werden sollen | Summe NumberOfWorkers für Ihren Entwickler-Endpunkt |
---|---|---|
3 | 5 | 18 |
10 | 5 | 60 |
50 | 5 | 300 |
Wenn Sie weniger Ressourcen pro Benutzer zuweisen möchten, wäre
spark.dynamicAllocation.maxExecutors
(oder numExecutors
) der einfachste Parameter zur Konfiguration als Livy-Sitzungsparameter. Wenn Sie die folgende Konfiguration einstellen/home/ec2-user/.sparkmagic/config.json
, SparkMagic werden pro Livy-Sitzung maximal 5 Executoren zugewiesen. Das hilft Ihnen, die Ressourcen pro Livy-Sitzung zu trennen.
"session_configs": { "conf": { "spark.dynamicAllocation.maxExecutors":"5" } },
Angenommen, Sie haben einen Entwicklungsendpunkt mit 18 Workern (G.1X) und es gibt 3 gleichzeitige Notebook-Benutzer. Wenn Ihre Sitzungskonfiguration über den Parameter
spark.dynamicAllocation.maxExecutors=5
verfügt, kann jeder Benutzer 1 Treiber und 5 Executors nutzen. Selbst wenn Sie mehrere Notebook-Abschnitte gleichzeitig ausführen, treten keine Ressourcenkonflikte auf.
Nachteile
Mit dieser Sitzungskonfiguration ("spark.dynamicAllocation.maxExecutors":"5"
) können Sie Fehler aufgrund von Ressourcenkonflikten vermeiden und müssen nicht auf die Ressourcenzuweisung warten, wenn mehrere Benutzerzugriffe gleichzeitig erfolgen. Allerdings kann Spark niemals mehr als 5 Executors für Ihre Livy-Sitzung zuweisen, selbst wenn viele freie Ressourcen verfügbar sind (z. B. weile keine anderen gleichzeitigen Benutzer vorliegen).
Sonstige Hinweise
Es wird empfohlen, den Jupyter-Kernel zu beenden, wenn Sie ein Notebook nicht mehr verwenden. Dadurch werden Ressourcen freigegeben, die andere Notebook-Benutzer sofort nutzen können, ohne auf den Ablauf des Kernels (automatisches Herunterfahren) warten zu müssen.
Häufige Probleme
Auch wenn Sie die Richtlinien befolgen, können bestimmte Probleme auftreten.
Sitzung nicht gefunden
Wenn Sie versuchen, einen Notebook-Abschnitt auszuführen, obwohl Ihre Livy-Sitzung bereits beendet wurde, wird die folgende Meldung angezeigt. Um die Livy-Sitzung zu aktivieren, müssen Sie den Jupyter-Kernel neu starten. Dazu gehen Sie im Jupyter-Menü auf Kernel > Restart (Neustart) und führen anschließend den Notebook-Abschnitt erneut aus.
An error was encountered: Invalid status code '404' from http://localhost:8998/sessions/13 with error payload: "Session '13' not found."
Nicht genügend YARN-Ressourcen
Wenn Sie versuchen, einen Notebook-Abschnitt auszuführen, obwohl Ihr Spark-Cluster nicht über genügend Ressourcen verfügt, um eine neue Livy-Sitzung zu starten, wird die folgende Meldung angezeigt. Oft können Sie dieses Problem vermeiden, wenn Sie die Richtlinien einhalten. Trotzdem besteht die Möglichkeit, dass dieses Problem auftritt. Als Workaround können Sie überprüfen, ob nicht benötigte aktive Livy-Sitzungen vorhanden sind. Diese sollten beendet werden, um die Clusterressourcen freizugeben. Details finden Sie im nächsten Abschnitt.
Warning: The Spark session does not have enough YARN resources to start. The code failed because of a fatal error: Session 16 did not start up in 60 seconds.. Some things to try: a) Make sure Spark has enough available resources for Jupyter to create a Spark context. b) Contact your Jupyter administrator to make sure the Spark magics library is configured correctly. c) Restart the kernel.
Überwachung und Debugging
In diesem Abschnitt werden Methoden für die Überwachung von Ressourcen und Sitzungen beschrieben.
Überwachen und Debuggen der Zuweisung von Clusterressourcen
Sie können die Spark-Benutzeroberfläche beobachten, um zu überwachen, wie viele Ressourcen pro Livy-Sitzung zugewiesen werden und welche Spark-Konfigurationen für den Auftrag am effektivsten sind. Informationen zum Aktivieren der Spark-Benutzeroberfläche finden Sie unter Aktivieren der Apache-Spark-Webbenutzeroberfläche für Entwicklungsendpunkte.
(Optional) Wenn Sie eine Echtzeitansicht der Spark-Benutzeroberfläche benötigen, können Sie einen SSH-Tunnel für den Spark-Verlaufsserver konfigurieren, der auf dem Spark-Cluster ausgeführt wird.
ssh -i <private-key.pem> -N -L 8157:<development endpoint public address>:18080 glue@<development endpoint public address>
Dann können Sie http://localhost:8157 in Ihrem Browser öffnen, um die Spark-Benutzeroberfläche aufzurufen.
Kostenlose, nicht benötigte Livy-Sitzungen
Sehen Sie sich diese Verfahren an, mit denen nicht benötigte Livy-Sitzungen in einem Notebook oder Spark-Cluster beendet werden.
(a). Beenden von Livy-Sitzungen in einem Notebook
Sie können den Kernel in einem Jupyter Notebook herunterfahren, um nicht benötigte Livy-Sitzungen zu beenden.
(b). Beenden von Livy-Sitzungen in einem Spark-Cluster
Wenn noch nicht benötigte Livy-Sitzungen ausgeführt werden, können Sie diese im Spark-Cluster beenden.
Als Voraussetzung für dieses Verfahren müssen Sie den öffentlichen SSH-Schlüssel für Ihren Entwicklungsendpunkt konfigurieren.
Zur Anmeldung beim Spark-Cluster können Sie den folgenden Befehl ausführen:
$ ssh -i <private-key.pem> glue@<development endpoint public address>
Mit dem folgenden Befehl können Sie die aktiven Livy-Sitzungen anzeigen:
$ yarn application -list 20/09/25 06:22:21 INFO client.RMProxy: Connecting to ResourceManager at ip-255-1-106-206.ec2.internal/172.38.106.206:8032 Total number of applications (application-types: [] and states: [SUBMITTED, ACCEPTED, RUNNING]):2 Application-Id Application-Name Application-Type User Queue State Final-State Progress Tracking-URL application_1601003432160_0005 livy-session-4 SPARK livy default RUNNING UNDEFINED 10% http://ip-255-1-4-130.ec2.internal:41867 application_1601003432160_0004 livy-session-3 SPARK livy default RUNNING UNDEFINED 10% http://ip-255-1-179-185.ec2.internal:33727
Anschließend können Sie die Livy-Sitzungen mit dem folgenden Befehl beenden:
$ yarn application -kill application_1601003432160_0005 20/09/25 06:23:38 INFO client.RMProxy: Connecting to ResourceManager at ip-255-1-106-206.ec2.internal/255.1.106.206:8032 Killing application application_1601003432160_0005 20/09/25 06:23:39 INFO impl.YarnClientImpl: Killed application application_1601003432160_0005