Wie behebe ich den Fehler ConnectTimeoutError, wenn ich von meinem Amazon-SageMaker-Studio-Notebook aus eine Verbindung zu einem Amazon-EMR-Cluster herstelle?

Letzte Aktualisierung: 14.11.2022

Ich möchte den Verbindungs-Timeout-Fehler beheben, den ich erhalte, wenn ich versuche, von meinem Amazon-SageMaker-Studio-Notebook aus eine Verbindung zu einem Amazon-EMR-Cluster herzustellen.

Auflösung

Der Verbindungs-Timeout-Fehler kann aufgrund von Netzwerkkonfigurationsproblemen im Zusammenhang mit den folgenden Problemen für SageMaker Studio oder den Amazon-EMR-Cluster auftreten:

  • Amazon Virtual Private Cloud (Amazon VPC)
  • Subnetze
  • Sicherheitsgruppen

Stellen Sie sicher, dass die folgenden Voraussetzungen für die Verbindung erfüllt sind:

  • SageMaker Studio wird im Nur-VPC-Modus gestartet.
  • Der Amazon-EMR-Cluster und das SageMaker-Studio-Notebook werden in derselben VPC gestartet. Wenn sie sich in verschiedenen VPCs befinden, sind sie über eine VPC-Peering-Verbindung verbunden. Wenn VPC-Peering für Ihren regionsübergreifenden Anwendungsfall verwendet wird, müssen Sie die Konfigurationsdatei /etc/sparkmagic/config.json manuell konfigurieren. Dies liegt daran, dass die Discovery-Funktionalität des Amazon-EMR-Clusters derzeit keine regionsübergreifende Verbindung unterstützt. Weitere Informationen finden Sie unter Durch Spark in Amazon EMR gestützte Amazon-SageMaker-Notebooks herstellen.
  • Der Amazon-EMR-Cluster wird mit den installierten Anwendungen Apache Spark und Apache Livy gestartet.

Gehen Sie wie folgt vor, um Verbindungs-Timeout-Fehler zu beheben:

1.    Führen Sie die folgenden Kontrollen durch:

  • Vergewissern Sie sich, dass die Sicherheitsgruppen oder Netzwerkzugriffskontrolllisten (ACLs) korrekt konfiguriert sind, um Datenverkehr auf Port 8998 zuzulassen. Führen Sie diese Prüfung sowohl für das SageMaker-Studio-Notebook als auch für den Amazon-EMR-Cluster durch.
  • Stellen Sie sicher, dass die Sicherheitsgruppe für SageMaker Studio über eine eingehende Regel verfügt, die NFS-Verkehr über Port 2049 zwischen der Domain und dem Amazon-Elastic-File-System-Volume (Amazon EFS) zulässt.
  • Stellen Sie sicher, dass die EMR-Cluster-Masterknoten-Sicherheitsgruppe über eine eingehende Regel für benutzerdefiniertes TCP über Port 8998 verfügt. Diese Regel kann entweder die Sicherheitsgruppe des Studios oder einen CIDR angeben, der das Subnetz des Studios einschließt.
    Hinweis: Wenn Sie VPC-Peering verwenden, finden Sie weitere Informationen unter Aktualisieren Sie Ihre Sicherheitsgruppen, um Peer-Sicherheitsgruppen zu referenzieren. Diese Dokumentation enthält Informationen zur Angabe einer Sicherheitsgruppe aus einer kontoübergreifenden VPC. Wenn Sie eine VPC-Peering-Verbindung zwischen Amazon-EMR- und Studio-Subnetzen haben, müssen die jeweiligen Routing-Tabellen den Datenverkehr untereinander weiterleiten. Wenn sie den Verkehr nicht richtig weiterleiten, erhalten Sie den ConnectTimeoutError.

2.    Wenn Sie Ihr privates Subnetz im Nur-VPC-Modus ohne NAT-Gateway einrichten, erstellen Sie die folgenden AWS-PrivateLink-Schnittstellen-Endpunkte für EMR bzw. AWS Security Token Service (AWS STS):

  • com.amazonaws. .elasticmapreduce
  • com.amazonaws. .sts

Diese Endpunkte müssen unter der VPC erstellt werden, die mit dem EMR-Cluster und SageMaker Studio verwendet wird.

AWS STS ist ein globaler Service. Daher erhalten Sie möglicherweise den ConnectTimeoutError, wenn Sie versuchen, eine Verbindung zu einem kontoübergreifenden Amazon EMR-Cluster von Studio in einer anderen Region als us-east-1 herzustellen:

ConnectTimeoutError: Connect timeout on endpoint URL: "https://sts.amazonaws.com/"

Um diesen Fehler zu beheben, setzen Sie die Umgebungsvariable AWS_STS_REGIONAL_ENDPOINTS im Jupyter-Notebook auf regional, bevor den Befehl verbinden ausführen:

%env AWS_STS_REGIONAL_ENDPOINTS=regional
%load_ext sagemaker_studio_analytics_extension.magics
%sm_analytics emr connect --cluster-id example-cluster-id --auth-type None  --assumable-role-arn arn:aws:iam::example-cross-account:role/example-role-name

Weitere Informationen zu regionalen Endpunkten finden Sie unter Verwaltung von AWS STS in einer AWS-Region und AWS-STS-Regionalisierten Endpunkten.

3.    Überprüfen Sie, ob die Verbindung funktioniert, indem Sie Ihr Studio-Notebook öffnen, den Sparkmagic Kernel auswählen und dann den folgenden Befehl in der Zelle ausführen:

Für Verbindungen innerhalb desselben Kontos:

%local
!sm-sparkmagic connect --cluster-id <cluster-id>

Für kontoübergreifende Verbindungen:

%local

# If needed, use STS Regional endpoint
%env AWS_STS_REGIONAL_ENDPOINTS=regional 

!sm-sparkmagic connect --cluster-id <cluster-id> --role-arn arn:aws:iam::<cross-account>:role/<role-name>

-oder-

Führen Sie den folgenden Befehl vom Notebook-Terminal auf der privaten IP des EMR-Masterknotens aus:

curl <EMR-Master-Private-IP>:8998/sessions -v

Führen Sie die folgenden Prüfungen durch, um sicherzustellen, dass die Konfigurationen korrekt sind:

SSH in den EMR-Cluster, um die PID des Livy-Service abzurufen:

ps -ef | grep livy

Überprüfen Sie den Port, auf dem der Livy-Service läuft:

sudo netstat -anp | grep <PID>

Stellen Sie sicher, dass der Service auf dem Standardport (8998) für Livy läuft.