Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Erreurs VPC lors des opérations du cluster Amazon EMR
Les erreurs suivantes sont communes à la configuration de VPC dans Amazon EMR.
Rubriques
Configuration de sous-réseau non valide
Sur la page Cluster Details (Détails de cluster), dans le champ Status (État), vous voyez une erreur similaire à ce qui suit :
The subnet configuration was invalid: Cannot find route to InternetGateway in main RouteTable
rtb-id
for vpc vpc-id
.
Pour résoudre ce problème, vous devez créer une passerelle Internet et la connecter à votre VPC. Pour plus d'informations, consultez Ajout d'une passerelle Internet à votre VPC.
Sinon, vérifiez que vous avez configuré votre VPC avec les paramètres Enable DNS resolution (Activer la résolution DNS) et Enable DNS hostname support (Activer le support de nom d'hôte DNS) activés. Pour plus d'informations, consultez Utilisation de DNS avec votre VPC.
Jeu d'options DHCP manquant
Vous voyez un échec d'étape dans le journal système (syslog) de cluster avec une erreur similaire à ce qui suit :
ERROR org.apache.hadoop.security.UserGroupInformation (main): PriviledgedActionException as:hadoop (auth:SIMPLE) cause:java.io.IOException: org.apache.hadoop.yarn.exceptions.ApplicationNotFoundException: Application with id '
application_id
' doesn't exist in RM.
or
ERROR org.apache.hadoop.streaming.StreamJob (main): Error Launching job : org.apache.hadoop.yarn.exceptions.ApplicationNotFoundException: Application with id '
application_id
' doesn't exist in RM.
Pour résoudre ce problème, vous devez configurer un VPC incluant un jeu d'options DHCP dont les paramètres sont définis sur les valeurs suivantes :
Note
Si vous utilisez la région AWS GovCloud (USA Ouest), définissez domain-name sur au us-gov-west-1.compute.internal
lieu de la valeur utilisée dans l'exemple suivant.
-
nom-domaine =
ec2.internal
Utilisez
ec2.internal
si votre région est USA Est (Virginie du Nord). Pour les autres régions, utilisezregion-name
.compute.internal
. Par exemple, dans la région us-west-2, utilisez domain-name (nom-domaine)=us-west-2.compute.internal
. -
domain-name-servers =
AmazonProvidedDNS
Pour plus d'informations, consultez Jeux d'options DHCP.
Erreurs d'autorisations
Une défaillance dans le journal stderr
pour une étape indique qu'une ressource Amazon S3 n'a pas les autorisations appropriées. Il s'agit d'une erreur 403 et l'erreur ressemble à :
Exception in thread "main" com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID:
REQUEST_ID
Si le ActionOnFailure paramètre est défini surTERMINATE_JOB_FLOW
, le cluster se terminera avec l'état,SHUTDOWN_COMPLETED_WITH_ERRORS
.
Quelques façons pour résoudre ce problème incluent les suivantes :
-
Si vous utilisez une politique de compartiment Amazon S3 au sein d'un VPC, assurez-vous de donner accès à tous les compartiments en créant un point de terminaison de VPC et en sélectionnant Tout autoriser sous l'option Politique lorsque vous créez le point de terminaison.
-
Assurez-vous que toutes stratégies rattachées aux ressources S3 incluent le VPC dans lequel vous lancez le cluster.
-
Essayez d'exécuter la commande suivante à partir de votre cluster afin de vérifier que vous pouvez accéder au compartiment
hadoop fs -copyToLocal s3://
path-to-bucket
/tmp/ -
Vous pouvez obtenir des informations de débogage plus spécifiques en définissant le paramètre
log4j.logger.org.apache.http.wire
surDEBUG
dans le fichier/home/hadoop/conf/log4j.properties
sur le cluster. Vous pouvez vérifier le fichier journalstderr
après avoir essayé d'accéder au compartiment depuis le cluster. Le fichier journal fournira des informations plus détaillées :Access denied for getting the prefix for bucket - us-west-2.elasticmapreduce with path samples/wordcount/input/ 15/03/25 23:46:20 DEBUG http.wire: >> "GET /?prefix=samples%2Fwordcount%2Finput%2F&delimiter=%2F&max-keys=1 HTTP/1.1[\r][\n]" 15/03/25 23:46:20 DEBUG http.wire: >> "Host: us-west-2.elasticmapreduce.s3.amazonaws.com[\r][\n]"
Erreurs qui se traduisent par START_FAILED
Avant AMI 3.7.0, VPCs lorsqu'un nom d'hôte est spécifié, Amazon EMR mappe les noms d'hôtes internes du sous-réseau avec des adresses de domaine personnalisées comme suit :. ip-
Par exemple, si le nom d'hôte était X.X.X.X.customdomain.com
.tldip-10.0.0.10
et le VPC a l'option de nom de domaine définie sur customdomain.com, le nom d'hôte mappé par Amazon EMR qui en résulte serait ip-10.0.1.0.customdomain.com
. Une entrée est ajoutée dans /etc/hosts
pour résoudre le nom d'hôte sur 10.0.0.10. Ce comportement est modifié avec l'AMI 3.7.0 et Amazon EMR respecte désormais entièrement la configuration DHCP du VPC. Précédemment, les clients pouvaient également utiliser une action d'amorçage pour spécifier un mappage de nom d'hôte.
Si vous souhaitez conserver ce comportement, vous devez fournir le DNS et transmettre la configuration de résolution dont vous avez besoin pour le domaine personnalisé.
Cluster Terminated with
errors
et NameNode ne parvient pas à démarrer
Lors du lancement d'un cluster EMR dans un VPC qui permet d'utiliser un nom de domaine DNS personnalisé, votre cluster peut échouer avec le message d'erreur suivant dans la console :
Terminated with errors On the master instance(
instance-id
), bootstrap action 1 returned a non-zero return code
L'échec est dû à l' NameNode impossibilité de démarrer. Cela entraînera la découverte de l'erreur suivante dans les NameNode journaux, dont l'URI Amazon S3 est de la forme s3://
:amzn-s3-demo-bucket
/logs
/cluster-id
/daemons/master instance-id
/hadoop-hadoop-namenode-master node hostname
.log.gz
2015-07-23 20:17:06,266 WARN org.apache.hadoop.hdfs.server.namenode.FSNamesystem (main): Encountered exception loading fsimage java.io.IOException: NameNode is not formatted. at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:212) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFSImage(FSNamesystem.java:1020) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFromDisk(FSNamesystem.java:739) at org.apache.hadoop.hdfs.server.namenode.NameNode.loadNamesystem(NameNode.java:537) at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:596) at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:765) at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:749) at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1441) at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1507)
Cela est dû à un problème potentiel selon lequel une EC2 instance peut avoir plusieurs ensembles de noms de domaine complets lors du lancement de clusters EMR dans un VPC, qui utilise à la fois un serveur DNS fourni et un AWS serveur DNS personnalisé fourni par l'utilisateur. Si le serveur DNS fourni par l'utilisateur ne fournit aucun enregistrement de pointeur (PTR) pour aucun enregistrement A utilisé pour désigner des nœuds dans un cluster EMR, les clusters échouent à démarrer lorsqu'ils sont configurés de cette façon. La solution consiste à ajouter 1 enregistrement PTR pour chaque enregistrement A créé lorsqu'une EC2 instance est lancée dans l'un des sous-réseaux du VPC.