Direkt zum Inhalt

Warum kann ich die Spark-Benutzeroberfläche für AWS Glue ETL-Jobs nicht sehen?

Lesedauer: 3 Minute
0

Wenn ich eine AWS CloudFormation-Vorlage oder einen Docker lokal verwende, kann ich die Apache Spark-Benutzeroberfläche für AWS Glue ETL-Jobs nicht sehen.

Lösung

Je nachdem, wie du auf die Spark-Benutzeroberfläche zugreifst, solltest du die folgenden Lösungsschritte ausführen.

CloudFormation-Stack

Wenn du einen CloudFormation-Stack verwenden, um die Spark-Benutzeroberfläche anzuzeigen, stellt eine Amazon Elastic Compute Cloud (Amazon EC2)-Instance eine HTTPS-Anfrage. Diese Anfrage bestätigt, ob die Spark-Benutzeroberfläche funktioniert. Wenn die Anfrage fehlschlägt, erhältst du die folgende Fehlermeldung:

"WaitCondition timed out. Received 0 conditions when expecting 1,"

Nach dem Auftreten dieses Fehlers führt CloudFormation ein Rollback des Stacks durch.

Gehe wie folgt vor, um dieses Problem zu beheben:

  • Bestätige, dass das Subnetz den Amazon Simple Storage Service (Amazon S3) API-Endpunkt erreichen kann. Wenn du beispielsweise ein privates Subnetz verwendest, stelle sicher, dass das Subnetz über einen VPC-Endpunkt (Virtual Private Cloud) oder ein NAT-Gateway verfügt.
  • Bestätige, dass du über den Port des Spark-Verlaufsservers auf das Subnetz zugreifen kannst. Beispielsweise könnte eine Firewall den Port blockieren und den vorherigen Fehler verursachen.
  • Vergewissere dich, dass du einen gültigen Amazon S3-Pfad für das Ereignisprotokollverzeichnis eingegeben hast. Du musst s3a:// für das Pfadschema der Ereignisprotokolle verwenden.
    Hinweis: Wenn der von dir angegebene Amazon S3-Pfad Ereignisprotokolldateien enthält, ist der Pfad gültig.

Wenn du immer noch eine Fehlermeldung erhältst, überprüfe für weitere Details die folgenden Protokollgruppen in Amazon CloudWatch Logs:

  • /aws-glue/sparkui_cfn/cfn-init.log
  • /aws-glue/sparkui_cfn/spark_history_server.log

Hinweis: CloudFormation beendet die EC2-Instance des Verlaufs-Servers, wenn der Stack zurückgesetzt wird. Um die Instance nicht zu beenden, aktiviere den Kündigungsschutz für den Stack.

Docker

Wenn du Docker verwendest, um die Spark-Benutzeroberfläche anzuzeigen, und von deinem Browser aus keine Verbindung zum Spark-Verlaufsserver herstellen kannst, überprüfe die folgenden Konfigurationen:

  • Vergewissere dich, dass die AWS-Anmeldeinformationen für den Zugriffsschlüssel und den geheimen Schlüssel gültig sind. Um temporäre Anmeldeinformationen zu verwenden, musst du spark.hadoop.fs.s3a.session.token im Befehl verwenden. Beispielbefehl:

    docker run -itd -e SPARK_HISTORY_OPTS="$SPARK_HISTORY_OPTS \
    -Dspark.history.fs.logDirectory=s3a://path_to_eventlog \
    -Dspark.hadoop.fs.s3a.access.key=AWS_ACCESS_KEY_ID
    -Dspark.hadoop.fs.s3a.secret.key=AWS_SECRET_ACCESS_KEY \
    -Dspark.hadoop.fs.s3a.session.token=SESSION_TOKEN \
    -Dspark.hadoop.fs.s3a.aws.credentials.provider=org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider" \
    -p 18080:18080 glue/sparkui:latest "/opt/spark/bin/spark-class org.apache.spark.deploy.history.HistoryServer"

    Hinweis: Ersetze AWS_ACCESS_KEY_ID durch deine Schlüssel-ID, AWS_SECRET_ACCESS_KEY durch deinen geheimen Zugriffsschlüssel und SESSION_TOKEN durch deinen Sitzungstoken.

  • Vergewissere dich, dass du einen gültigen Amazon S3-Pfad für das Ereignisprotokollverzeichnis eingegeben hast. Du musst s3a:// für das Pfadschema der Ereignisprotokolle verwenden.
    Hinweis: Wenn der von dir angegebene Amazon S3-Pfad Ereignisprotokolldateien enthält, ist der Pfad gültig.

  • Vergewissere dich, dass du die richtige Portnummer im Browser eingegeben hast. Um die Port-Nummer zu ändern, ändere den Parameter -p im Befehl docker run und den Parameter spark.history.ui.port in der Docker-Datei.
    Hinweis: Die Standard-Port-Nummer ist 18080. Beispielport: http://localhost:18080.

Wenn du die Spark-Benutzeroberfläche immer noch nicht sehen kannst, überprüfe deine Protokolle auf weitere Details. Um die stdout- und stderr-Logs für den Docker-Container zu erhalten, führe docker run mit dem Parameter -it anstelle des Parameters -itd aus. Beispielbefehl:

docker run -it -e SPARK_HISTORY_OPTS="$SPARK_HISTORY_OPTS \
-Dspark.history.fs.logDirectory=s3a://path_to_eventlog \
-Dspark.hadoop.fs.s3a.access.key=AWS_ACCESS_KEY_ID
-Dspark.hadoop.fs.s3a.secret.key=AWS_SECRET_ACCESS_KEY \
-Dspark.hadoop.fs.s3a.session.token=SESSION_TOKEN \
-Dspark.hadoop.fs.s3a.aws.credentials.provider=org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider" \
-p 18080:18080 glue/sparkui:latest "/opt/spark/bin/spark-class org.apache.spark.deploy.history.HistoryServer"

Hinweis: Ersetze AWS_ACCESS_KEY_ID durch deine Schlüssel-ID, AWS_SECRET_ACCESS_KEY durch deinen geheimen Zugriffsschlüssel und SESSION_TOKEN durch deinen Sitzungstoken.

Ähnliche Informationen

Überwachen von Jobs mithilfe der Apache Spark-Web-Benutzeroberfläche

Apache Spark-Web-UI für AWS Glue-Jobs aktivieren

AWS OFFICIALAktualisiert vor 6 Monaten