Lorsque j'utilise un modèle AWS CloudFormation ou Docker localement, je ne parviens pas à visualiser l'interface utilisateur d'Apache Spark pour les tâches ETL AWS Glue.
Résolution
En fonction de la manière dont vous accédez à l'interface utilisateur de Spark, suivez les étapes de résolution suivantes.
Pile CloudFormation
Lorsque vous utilisez une pile CloudFormation pour afficher l'interface utilisateur de Spark, une instance Amazon Elastic Compute Cloud (Amazon EC2) envoie une requête HTTPS. Cette requête confirme si l'interface utilisateur de Spark fonctionne. Si la requête échoue, le message d'erreur suivant s'affiche :
"WaitCondition timed out. Received 0 conditions when expecting 1,"
Une fois cette erreur survenue, CloudFormation restaure la pile.
Pour résoudre ce problème, procédez comme suit :
- Vérifiez que le sous-réseau peut atteindre le point de terminaison de l’API Amazon Simple Storage Service (Amazon S3). Par exemple, si vous utilisez un sous-réseau privé, vérifiez que le sous-réseau possède un point de terminaison de cloud privé virtuel (VPC) ou une passerelle NAT.
- Vérifiez que vous pouvez accéder au sous-réseau via le port du serveur historique Spark. Par exemple, un pare-feu peut bloquer le port et provoquer l'erreur précédente.
- Vérifiez que vous avez saisi un chemin Amazon S3 valide pour le répertoire de journaux des événements. Vous devez utiliser s3a:// pour le schéma de chemin des journaux d'événements.
Remarque : Si le chemin Amazon S3 que vous avez spécifié contient des fichiers journaux des événements, le chemin est valide.
Si le message d'erreur persiste, consultez les groupes de journaux suivants dans Amazon CloudWatch Logs pour plus de détails :
- /aws-glue/sparkui_cfn/cfn-init.log
- /aws-glue/sparkui_cfn/spark_history_server.log
Remarque : CloudFormation résilie l'instance EC2 du serveur historique lorsque la pile est restaurée. Pour ne pas résilier l'instance, activez la protection de terminaison pour la pile.
Docker
Si vous utilisez Docker pour consulter l'interface utilisateur de Spark et que vous ne parvenez pas à vous connecter au serveur historique Spark depuis votre navigateur, vérifiez les configurations suivantes :
-
Vérifiez que les informations d'identification AWS relatives à la clé d'accès et à la clé secrète sont valides. Pour utiliser des informations d'identification temporaires, vous devez utiliser spark.hadoop.fs.s3a.session.token dans la commande. Exemple de commande :
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"
Remarque : Remplacez AWS_ACCESS_KEY_ID par votre identifiant de clé, AWS_SECRET_ACCESS_KEY par votre clé d'accès secrète et SESSION_TOKEN par votre jeton de session.
-
Vérifiez que vous avez saisi un chemin Amazon S3 valide pour le répertoire de journaux des événements. Vous devez utiliser s3a:// pour le schéma de chemin des journaux d'événements.
Remarque : Si le chemin Amazon S3 que vous avez spécifié contient des fichiers journaux des événements, le chemin est valide.
-
Vérifiez que vous avez saisi le numéro de port correct dans le navigateur. Pour modifier le numéro de port, modifiez le paramètre -p dans la commande docker run et le paramètre spark.history.ui.port dans le Dockerfile.
Remarque : Par défaut, le numéro de port est 18080. Exemple de port : http://localhost:18080.
Si vous ne parvenez toujours pas à afficher l'interface utilisateur de Spark, consultez vos journaux pour plus de détails. Pour obtenir les journaux stdout et stderr du conteneur Docker, exécutez docker run avec le paramètre -it plutôt qu’avec le paramètre -itd. Exemple de commande :
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"
Remarque : Remplacez AWS_ACCESS_KEY_ID par votre identifiant de clé, AWS_SECRET_ACCESS_KEY par votre clé d'accès secrète et SESSION_TOKEN par votre jeton de session.
Informations connexes
Surveillance des tâches à l’aide de l’interface utilisateur Web d’Apache Spark
Activation de l'interface utilisateur Web d'Apache Spark pour les tâches AWS Glue