Comment résoudre les problèmes liés à l'affichage de l'interface utilisateur Spark pour les tâches ETL AWS Glue ?

Date de la dernière mise à jour : 21/05/2020

Pourquoi l'interface utilisateur Apache Spark pour les tâches ETL AWS Glue ne s'affiche-t-elle pas ?

Solution

Choisissez l'une des solutions suivantes, selon que vous accédez à l'interface utilisateur Spark avec une pile AWS CloudFormation ou avec Docker.

Pile AWS CloudFormation

Lorsque vous utilisez une pile AWS CloudFormation pour afficher l'interface utilisateur Spark, une instance Amazon Elastic Compute Cloud (Amazon EC2) effectue une demande HTTPS pour vérifier que l'interface utilisateur Spark fonctionne. Si cette demande échoue, vous obtenez le message d'erreur « WaitCondition timed out. Received 0 conditions when expecting 1 », et la pile AWS CloudFormation est restaurée.

Vérifiez les éléments suivants pour résoudre ce problème :

  • Sous-réseau : 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 qu'il dispose d'un point de terminaison de VPC ou d'une passerelle NAT.
  • Port du serveur d'historique : assurez-vous que vous pouvez accéder au sous-réseau via le port du serveur d'historique Spark. Par exemple, un pare-feu peut bloquer le port.
  • Répertoire du journal des événements : vérifiez que vous avez saisi un chemin Amazon S3 valide pour le répertoire du journal des événements. Vous devez spécifier un chemin au format s3a ://. Si l'emplacement Amazon S3 que vous avez spécifié contient des fichiers journaux d'événements, le chemin est valide.

Si vous obtenez toujours un message d'erreur, vérifiez les groupes de journaux suivants dans Amazon CloudWatch Logs :

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

Remarque : l'instance EC2 du serveur d'historique est résiliée lors de la restauration de la pile CloudFormation. Pour empêcher la résiliation de l'instance, activez la protection contre la résiliation pour la pile.

Docker

Si vous utilisez Docker pour afficher l'interface utilisateur Spark et que vous ne parvenez pas à vous connecter au serveur d'historique Spark à partir de votre navigateur Web, vérifiez les éléments suivants :

  • Assurez-vous que les informations d'identification AWS (clé d'accès et clé secrète) sont valides. Si vous souhaitez employer des informations d'identification temporaires, vous devez utiliser spark.hadoop.fs.s3a.session.token dans la commande. Exemple :
$ 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"
  • Vérifiez que vous avez saisi un chemin Amazon S3 valide pour le répertoire du journal des événements. Vous devez spécifier un chemin au format s3a ://. Si l'emplacement Amazon S3 que vous avez spécifié contient des fichiers journaux d'événements, le chemin est valide.
  • Vérifiez que vous avez saisi le bon numéro de port dans le navigateur. Par défaut, le numéro de port est 18080 (par exemple, http://localhost:18080). Pour modifier le numéro de port, modifiez le paramètre -p dans la commande et le paramètre spark.history.ui.port dans le Dockerfile.

Si vous ne parvenez toujours pas à afficher l'interface utilisateur Spark, vérifiez les journaux. Pour obtenir les journaux stdout et stderr pour le conteneur Docker, exécutez docker run avec le paramètre -it au lieu du paramètre -itd. Exemple :

$ 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"