Cette rubrique apporte des réponses aux questions fréquemment posées concernant YARN.
-
Problèmes liés au cluster
Quels éléments sont inclus dans un redémarrage avec état d'un cluster ?
Comment activer la haute disponibilité (HA) du ResourceManager ?
Comment vérifier que le service ResourceManager fonctionne correctement ?
Que faire si les modifications de configuration YARN ne sont pas prises en compte ?
-
Gestion des groupes de ressources et des files d'attente
-
Gestion des journaux des composants
Pourquoi les journaux .out des composants du service YARN ne sont-ils pas automatiquement effacés ?
-
Problèmes liés aux composants
-
RM
-
NM
-
Interface utilisateur ou API REST
-
Timeline Server
-
En quoi consiste un redémarrage avec état d'un cluster ?
Un redémarrage avec état d'un cluster comprend un redémarrage du ResourceManager et un redémarrage du NodeManager. Le ResourceManager conserve les informations de base et l'état des applications. Le NodeManager maintient les informations et l'état des conteneurs en cours d'exécution. Le ResourceManager et le NodeManager synchronisent en permanence leur propre état vers des systèmes de stockage externes tels que ZooKeeper, LevelDB et Hadoop Distributed File System (HDFS). L'état du ResourceManager et du NodeManager peut être automatiquement rechargé et récupéré après leur redémarrage. Cela garantit que l'état des applications et des conteneurs peut être automatiquement restauré après la mise à niveau ou le redémarrage du cluster. Dans la plupart des cas, la mise à niveau ou le redémarrage d'un cluster est imperceptible pour les applications et les conteneurs.
Comment activer la haute disponibilité (HA) du ResourceManager ?
Consultez ou configurez les paramètres dans l'onglet Configure de la page du service YARN d'un cluster, depuis la console E-MapReduce (EMR). Le tableau suivant décrit ces paramètres.
|
Parameter |
Description |
|
yarn.resourcemanager.ha.enabled |
Indique s'il faut activer la haute disponibilité du ResourceManager. Définissez la valeur sur true pour activer la haute disponibilité du ResourceManager. Valeur par défaut : false. |
|
yarn.resourcemanager.ha.automatic-failover.enabled |
Indique s'il faut activer le basculement automatique pour le ResourceManager. Valeur par défaut : true. |
|
yarn.resourcemanager.ha.automatic-failover.embedded |
Indique s'il faut activer le basculement automatique intégré pour le ResourceManager. Valeur par défaut : true. |
|
yarn.resourcemanager.ha.curator-leader-elector.enabled |
Indique s'il faut utiliser Curator. Définissez la valeur sur true pour utiliser Curator. Valeur par défaut : false. |
|
yarn.resourcemanager.ha.automatic-failover.zk-base-path |
Le chemin dans lequel les informations relatives à un leader sont stockées. Utilisez la valeur par défaut /yarn-leader-electionleader-elector. |
Comment configurer une mise à jour à chaud ?
Vous pouvez effectuer les opérations décrites dans cette section uniquement avec Hadoop 3.2.0 ou une version ultérieure.
-
Configurez les paramètres clés.
Vous pouvez consulter ou configurer les paramètres relatifs à la mise à jour à chaud dans l'onglet Configure de la page du service YARN d'un cluster, depuis la console EMR. Le tableau suivant décrit ces paramètres.
Parameter
Description
Recommended value
yarn.scheduler.configuration.store.class
Le type du magasin de données. Si vous définissez ce paramètre sur fs, un système de fichiers est utilisé comme magasin de données.
fs
yarn.scheduler.configuration.max.version
Le nombre maximal de fichiers de configuration pouvant être stockés dans le système de fichiers. Les fichiers de configuration excédentaires sont automatiquement supprimés si le nombre de fichiers dépasse la valeur de ce paramètre.
100
yarn.scheduler.configuration.fs.path
Le chemin de stockage du fichier capacity-scheduler.xml.
Si vous ne configurez pas ce paramètre, un chemin de stockage est automatiquement créé. Si aucun préfixe n'est spécifié, le chemin relatif du système de fichiers par défaut est utilisé comme chemin de stockage.
/yarn/<Nom du cluster>/scheduler/conf
ImportantRemplacez <Nom du cluster> par un nom de cluster spécifique. Plusieurs clusters pour lesquels le service YARN est déployé peuvent utiliser le même stockage distribué.
-
Consultez les configurations du fichier capacity-scheduler.xml.
Méthode 1 (API RESTful) : Accédez à une URL au format suivant : http://<rm-address>/ws/v1/cluster/scheduler-conf.
Méthode 2 (HDFS) : Accédez au chemin de configuration ${yarn.scheduler.configuration.fs.path}/capacity-scheduler.xml.<timestamp> pour consulter les configurations du fichier capacity-scheduler.xml. <timestamp> indique l'heure de génération du fichier capacity-scheduler.xml. Le fichier capacity-scheduler.xml dont la valeur d'horodatage est la plus récente correspond au dernier fichier de configuration.
-
Mettez à jour les configurations.
Par exemple, vous pouvez modifier le paramètre yarn.scheduler.capacity.maximum-am-resource-percent et supprimer le paramètre yarn.scheduler.capacity.xxx. Pour supprimer un paramètre, il suffit de retirer le champ de valeur associé.
curl -X PUT -H "Content-type: application/json" 'http://<rm-address>/ws/v1/cluster/scheduler-conf' -d ' { "global-updates": [ { "entry": [{ "key":"yarn.scheduler.capacity.maximum-am-resource-percent", "value":"0.2" },{ "key":"yarn.scheduler.capacity.xxx" }] } ] }'
Comment gérer une répartition inégale des ressources entre les applications au sein d'une file d'attente ?
Vous pouvez effectuer les opérations décrites dans cette section uniquement avec Hadoop 2.8.0 ou une version ultérieure.
Dans la plupart des cas, les ressources d'une file d'attente sont occupées par des tâches volumineuses, tandis que les petites tâches ne parviennent pas à obtenir suffisamment de ressources. Pour garantir une répartition équitable des ressources entre les tâches, procédez comme suit :
-
Modifiez la valeur du paramètre yarn.scheduler.capacity.<queue-path>.ordering-policy pour une file d'attente, en remplaçant la valeur par défaut fifo par fair.
RemarqueLes planificateurs FIFO (First In, First Out) et Fair constituent deux types de planificateurs dans YARN.
Vous pouvez également modifier le paramètre yarn.scheduler.capacity.<queue-path>.ordering-policy.fair.enable-size-based-weight. La valeur par défaut de ce paramètre est false, ce qui signifie que les tâches sont triées par ordre croissant d'utilisation des ressources. Si vous définissez le paramètre sur true, les tâches sont triées par ordre croissant du quotient de l'utilisation des ressources divisée par la demande en ressources.
-
Activez la préemption des ressources au sein d'une file d'attente.
Le tableau suivant décrit les paramètres utilisés pour contrôler la préemption des ressources au sein d'une file d'attente.
Parameter
Description
Recommended value
yarn.resourcemanager.scheduler.monitor.enable
Indique s'il faut activer la préemption. Ce paramètre est configuré dans l'onglet yarn-site. Les autres paramètres relatifs à la préemption des ressources des files d'attente sont configurés dans l'onglet capacity-scheduler.
true
yarn.resourcemanager.monitor.capacity.preemption.intra-queue-preemption.enabled
Indique s'il faut activer la préemption des ressources au sein d'une file d'attente. La préemption des ressources entre les files d'attente est activée par défaut et ne peut pas être désactivée.
true
yarn.resourcemanager.monitor.capacity.preemption.intra-queue-preemption.preemption-order-policy
La politique selon laquelle la préemption des ressources au sein d'une file d'attente est effectuée. Valeur par défaut : userlimit_first.
priority_first
yarn.scheduler.capacity.<queue-path>.disable_preemption
Indique s'il faut désactiver la préemption des ressources pour la file d'attente spécifiée. Valeur par défaut : false.
Si vous définissez le paramètre sur true, les ressources de la file d'attente spécifiée ne peuvent pas être préemptées. Si ce paramètre n'est pas configuré pour une file d'attente enfant, celle-ci hérite de la configuration du paramètre de la file d'attente parente.
true
yarn.scheduler.capacity.<queue-path>.intra-queue-preemption.disable_preemption
Indique s'il faut désactiver la préemption des ressources au sein d'une file d'attente pour la file d'attente spécifiée. Valeur par défaut : false.
Si vous définissez le paramètre sur true, la préemption des ressources au sein d'une file d'attente est désactivée. Si ce paramètre n'est pas configuré pour une file d'attente enfant, celle-ci hérite de la configuration du paramètre de la file d'attente parente.
true
Consulter l'utilisation des ressources d'une file d'attente
Consultez Used Capacity sur l'interface YARN. Cette valeur indique le pourcentage de ressources actuellement utilisées par une file d'attente, calculé sur la base de la valeur la plus élevée entre l'utilisation de la mémoire et celle des vCore.
Accédez à l'interface YARN. Pour plus de détails, consultez Accéder aux interfaces web des composants open source.
Sur la page All Applications, cliquez sur l'ID de la tâche cible.
-
Cliquez sur la file d'attente dans la ligne Queue.
La section Application Queues affiche l'utilisation des ressources de la file d'attente.
Les détails de la file d'attente incluent des paramètres tels que Queue State, Used Capacity, Configured Capacity, Configured Max Capacity, Effective Capacity, Absolute Used Capacity et Used Resources. Le paramètre Used Capacity indique l'utilisation actuelle des ressources, par exemple
<memory:896, vCores:1> (10.9%).
Accumulation des fichiers journaux .out de YARN
Cause : Certaines bibliothèques dépendantes de Hadoop utilisent les API Java Logging, contournant ainsi les paramètres de rotation de log4j. La sortie d'erreur standard (stderr) de ces daemons est redirigée vers des fichiers
.out. Sans nettoyage automatique, ces fichiers s'accumulent et peuvent saturer le disque de données.-
Solution : Utilisez les commandes
headettailavec les horodatages des journaux pour vérifier si ces journaux issus des API Java consomment trop d'espace disque. Ces journaux sont généralement au niveau INFO et n'affectent pas le fonctionnement des composants. Pour éviter la saturation du disque, vous pouvez désactiver cette journalisation.Par exemple, pour optimiser le Timeline Server en désactivant la journalisation de la bibliothèque dépendante Jersey, procédez comme suit :
-
Exécutez la commande suivante pour surveiller les fichiers journaux
.outassociés àhadoop-timelineserver-dans le chemin des journaux YARN. Le chemin des journaux est/var/log/emr/yarn/pour un cluster DataLake et/mnt/disk1/log/hadoop-yarnpour un cluster Hadoop.tail /var/log/emr/yarn/*-hadoop-timelineserver-*.outLa sortie du journal affiche des enregistrements provenant du composant
com.sun.jersey.xxx com.sun.jersey.server.wadl.generators.AbstractWadlGeneratorGrammarGenerator attachTypes INFO: Couldn't find grammar element for class javax.ws.rs.core.Response xxx com.sun.jersey.server.wadl.generators.AbstractWadlGeneratorGrammarGenerator attachTypes INFO: Couldn't find grammar element for class javax.ws.rs.core.Response xxx com.sun.jersey.server.wadl.generators.AbstractWadlGeneratorGrammarGenerator attachTypes INFO: Couldn't find grammar element for class javax.ws.rs.core.Response com.sun.jersey.server.wadl.generators.AbstractWadlGeneratorGrammarGenerator attachTypes INFO: Couldn't find grammar element for class javax.ws.rs.core.Response xxx com.sun.jersey.server.wadl.generators.AbstractWadlGeneratorGrammarGenerator attachTypes INFO: Couldn't find grammar element for class javax.ws.rs.core.Response xxx com.sun.jersey.server.wadl.generators.AbstractWadlGeneratorGrammarGenerator attachTypes INFO: Couldn't find grammar element for class javax.ws.rs.core.Response -
Pour désactiver les journaux de niveau INFO de la bibliothèque Jersey, créez un fichier de configuration. Sur le nœud EMR qui héberge le Timeline Server, exécutez la commande suivante en tant qu'utilisateur root pour créer le fichier.
sudo su root -c "echo 'com.sun.jersey.level = OFF' > $HADOOP_CONF_DIR/off-logging.properties" Dans la console EMR, accédez à l'onglet Configure du service YARN. Recherchez le paramètre
YARN_TIMELINESERVER_OPTS(ouyarn_timelineserver_optspour un cluster Hadoop) et ajoutez-Djava.util.logging.config.file=off-logging.propertiesà sa valeur.Enregistrez la configuration et redémarrez le Timeline Server pour prendre en compte la modification. Surveillez le service. Si le Timeline Server démarre correctement et que son journal
.outn'affiche plus de messages provenant decom.sun.jersey, vous avez réussi à désactiver la journalisation.
-
Comment vérifier que le service ResourceManager fonctionne correctement ?
Utilisez l'une des méthodes suivantes pour vérifier le bon fonctionnement du service :
-
Vérifiez le statut de haute disponibilité (HA) du ResourceManager. Dans un cluster HA, assurez-vous qu'un seul processus ResourceManager est à l'état Active. Vérifiez si la valeur du champ haState est ACTIVE ou STANDBY et si celle du champ haZooKeeperConnectionState est CONNECTED. Le statut HA du ResourceManager dépend des valeurs de ces deux champs.
Interface en ligne de commande (CLI) : Exécutez la commande yarn rmadmin -getAllServiceState.
API RESTful : Accédez à une URL au format http://<rmAddress>/ws/v1/cluster/info.
Exemple de code

-
Vérifiez le statut des applications YARN.
Exécutez la commande suivante pour détecter les applications bloquées à l'état submitted ou accepted :
yarn application -list -
Vérifiez si une nouvelle application soumise s'exécute et s'arrête comme prévu. Exemple de commande :
hadoop jar <hadoop_home>/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-*-tests.jar sleep -m 1 -mt 1000 -r 0Vous pouvez ajouter le paramètre -Dmapreduce.job.queuename entre sleep et -m pour spécifier une file d'attente. La valeur par défaut de ce paramètre est
default.
Comment obtenir le statut d'une application ?
Consultez les informations suivantes sur une application pour connaître son statut.
Informations | Description |
Informations de base | Les informations de base d'une application incluent l'ID, l'utilisateur, le nom, le type d'application, l'état, la file d'attente, la priorité de l'application, l'heure de début, l'heure de fin, le statut final, les conteneurs en cours d'exécution, les vCores CPU alloués, la mémoire allouée (en Mo) et les diagnostics. Consultez ces informations via l'une des pages ou méthodes suivantes :
|
Informations sur la file d'attente |
|
Journaux des conteneurs |
|
Dépannage des applications
-
Vérifiez l'état de l'application sur sa page de détails ou via l'API REST correspondante.
-
État de l'application introuvable. Causes possibles :
Le processus client s'est terminé avant la soumission de l'application à YARN. Cela peut indiquer un problème avec un composant côté client, tel que BRS ou flowagent. Vérifiez les journaux de soumission du client.
Le client ne parvient pas à se connecter au ResourceManager YARN. Vérifiez que l'adresse du ResourceManager est correcte et qu'il n'y a aucun problème réseau. Un problème réseau peut générer l'erreur suivante sur le client :
com.aliyun.emr.flow.agent.common.exceptions.EmrFlowException: ###[E40001,RESOURCE_MANAGER]: Failed to access to resource manager, cause: The stream is closed.
-
NEW_SAVING : Dans cet état, les informations de l'application sont en cours d'écriture dans le magasin d'état ZooKeeper. Si l'application reste dans cet état, les causes possibles sont :
Un problème avec ZooKeeper. Vérifiez que le service ZooKeeper fonctionne correctement.
Un problème de lecture ou d'écriture des données dans ZooKeeper. Pour la solution, consultez Que faire si le ResourceManager est à l'état Standby et ne bascule pas automatiquement vers l'état Active ?
SUBMITTED : Cet état est rare. Une cause possible est un blocage du Capacity Scheduler dû à une contention de verrous provoquée par trop de requêtes de mise à jour des nœuds. Cela se produit généralement dans les clusters à grande échelle et nécessite une optimisation des processus. Pour un cas connexe, consultez YARN-9618.
-
ACCEPTED : Vérifiez les diagnostics. Agissez en fonction du message fourni.
-
Message d'erreur : "Queue's AM resource limit exceeded."
Cause possible : La somme des ressources ApplicationMaster (AM) utilisées et des ressources AM demandées dépasse la limite de la file d'attente pour les ressources AM. La condition vérifiée dans l'interface utilisateur est : ${Used Application Master Resources} + ${AM Resource Request} < ${Max Application Master Resources}.
Solution : Augmentez la limite de ressources AM pour la file d'attente. Par exemple, définissez le paramètre yarn.scheduler.capacity.<queue-path>.maximum-am-resource-percent sur 0,5.
-
Message d'erreur : "User's AM resource limit exceeded."
Cause possible : La somme des ressources AM utilisées par l'utilisateur et des ressources AM demandées dépasse la limite de ressources AM par utilisateur pour la file d'attente.
Solution : Augmentez le ratio de limite utilisateur. Modifiez les valeurs des paramètres yarn.scheduler.capacity.<queue-path>.user-limit-factor et yarn.scheduler.capacity.<queue-path>.minimum-user-limit-percent.
-
Message d'erreur : "AM container is launched, waiting for AM container to Register with RM."
Cause possible : L'ApplicationMaster a démarré, mais son initialisation interne n'est pas terminée, par exemple en raison d'un délai d'expiration de la connexion ZooKeeper.
Solution : Examinez les journaux de l'ApplicationMaster.
-
Message d'erreur : "Application is Activated, waiting for resources to be assigned for AM."
Passez à l'étape Étape 3 pour déterminer pourquoi la demande de ressources de l'ApplicationMaster n'est pas satisfaite.
-
RUNNING : Passez à l'étape Étape 2 pour vérifier si les demandes de ressources des conteneurs ont été satisfaites.
-
FAILED : Vérifiez les diagnostics. Agissez en fonction du message fourni.
-
Message d'erreur : "Maximum system application limit reached,cannot accept submission of application"
Cause possible : Le nombre total d'applications en cours d'exécution dans le cluster a dépassé la limite configurée (paramètre : yarn.scheduler.capacity.maximum-applications, valeur par défaut : 10 000).
Solution : Vérifiez les métriques JMX pour confirmer que chaque file d'attente contient le nombre attendu d'applications en cours d'exécution. Identifiez et corrigez les applications provoquant des soumissions répétées excessives. Si toutes les applications sont légitimes, envisagez d'augmenter cette valeur de configuration en fonction de la charge de travail du cluster.
-
Message d'erreur : "Application XXX submitted by user YYY to unknown queue: ZZZ"
Cause possible : L'application a été soumise à une file d'attente inexistante.
Solution : Soumettez l'application à une file d'attente feuille existante.
-
Message d'erreur : "Application XXX submitted by user YYY to non-leaf queue: ZZZ"
Cause possible : L'application a été soumise à une file d'attente parente.
Solution : Soumettez l'application à une file d'attente feuille existante.
-
Message d'erreur : "Queue XXX is STOPPED. Cannot accept submission of application: YYY"
Cause possible : L'application a été soumise à une file d'attente à l'état STOPPED ou DRAINING. Une file d'attente dans l'un de ces états est hors ligne ou en cours de déclassement.
Solution : Soumettez l'application à une file d'attente à l'état RUNNING.
-
Message d'erreur : "Queue XXX already has YYY applications, cannot accept submission of application: ZZZ"
Cause possible : Le nombre d'applications dans la file d'attente a atteint sa limite.
-
Solution :
Vérifiez si des applications problématiques sont soumises de manière répétée à la file d'attente.
Ajustez la configuration :
yarn.scheduler.capacity.<queue-path>.maximum-applications.
-
Message d'erreur : "Queue XXX already has YYY applications from user ZZZ cannot accept submission of application: AAA"
Cause possible : Le nombre d'applications de l'utilisateur a atteint sa limite.
-
Solution :
Vérifiez si l'utilisateur soumet de manière répétée une application problématique.
Ajustez les paramètres de configuration suivants :
yarn.scheduler.capacity.<queue-path>.maximum-applications,yarn.scheduler.capacity.<queue-path>.minimum-user-limit-percentetyarn.scheduler.capacity.<queue-path>.user-limit-factor.
-
-
-
Vérifiez si l'allocation des ressources YARN est incomplète.
Dans la liste des applications, cliquez sur un ID d'application pour accéder à sa page de détails.
Dans la liste en bas de la page, cliquez sur l'AM-ID pour ouvrir la page App Attempt.
-
Vérifiez la liste Total Outstanding Resource Requests pour identifier les ressources en attente. Vous pouvez également les rechercher via l'API REST PendingRequests.
Aucune ressource en attente : YARN a terminé l'allocation. Quittez cette vérification et examinez l'ApplicationMaster. En l'absence de ressources en attente, la section Total Outstanding Resource Requests affiche 0 pour toutes les métriques (par exemple,
memory:0, vCores:0), et le tableau des demandes de ressources ci-dessous est vide. Ce tableau comprend des colonnes telles que Priority, ResourceName, Capability et NumContainers.Des ressources sont en attente : L'allocation des ressources YARN n'est pas terminée. Passez à l'étape suivante.
-
Vérifiez les limites de ressources.
Vérifiez les ressources du cluster ou de la file d'attente. Consultez les informations sur les ressources, telles que Effective Max Resource et Used Resources.
Vérifiez si les ressources du cluster, de la file d'attente ou de sa file d'attente parente sont épuisées.
Vérifiez si une dimension de ressource dans la file d'attente feuille approche ou a atteint sa limite.
Lorsque l'utilisation des ressources du cluster est élevée (par exemple, supérieure à 85 %), la vitesse d'allocation des applications peut diminuer. Cela peut se produire parce que la plupart des nœuds ne disposent plus de ressources disponibles. Lorsqu'un nœud ne peut pas satisfaire une demande de ressources, le planificateur peut réserver la demande. Un grand nombre de réservations peut ralentir le processus d'allocation. Ce problème peut également être causé par un déséquilibre entre les ressources mémoire et CPU. Par exemple, certains nœuds peuvent avoir de la mémoire disponible mais pas de CPU, tandis que d'autres ont du CPU disponible mais pas de mémoire.
Vérifiez si les conteneurs échouent à démarrer même après l'allocation de leurs ressources. La page App Attempt de l'interface web YARN affiche le nombre de conteneurs alloués. Observez ce nombre pendant une courte période pour voir s'il change. Si un conteneur ne démarre pas, examinez les journaux correspondants du NodeManager ou du conteneur pour enquêter sur l'échec.
-
Modifiez dynamiquement le niveau de journalisation. Accédez à la page Log Level de l'interface web YARN (http://RM_IP:8088/logLevel). Dans le champ Class Name, saisissez le nom de la classe cible (par exemple, une classe du package
org.apache.hadoop.yarn.server.resourcemanager.scheduler, telle queorg.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity). Dans la liste déroulante Level, sélectionnezDEBUG, puis cliquez sur Set Log Level. Cette action définit dynamiquement le niveau de journalisation de la classe spécifiée sur DEBUG.ImportantActivez la journalisation DEBUG uniquement lors de la reproduction du problème. Une durée inférieure à une minute suffit généralement, car les journaux sont générés très rapidement. Après avoir capturé les journaux nécessaires, rétablissez le niveau de journalisation sur INFO.
Paramètres pour les ressources maximales disponibles
Les paramètres de planificateur ou de file d'attente suivants contrôlent les ressources maximales disponibles.
|
Paramètre |
Description |
Par défaut |
|
yarn.scheduler.maximum-allocation-mb |
La mémoire maximale en Mo pouvant être allouée à un conteneur au niveau du cluster. |
Dans E-MapReduce, la valeur par défaut correspond à la mémoire disponible du plus grand groupe de nœuds non maître spécifié lors de la création du cluster. Cette valeur correspond au paramètre yarn.nodemanager.resource.memory-mb de ce groupe de nœuds. |
|
yarn.scheduler.maximum-allocation-vcores |
Le nombre maximal de vCores pouvant être allouées à un conteneur au niveau du cluster. |
Dans E-MapReduce, la valeur par défaut est 32. |
|
yarn.scheduler.capacity.<queue-path>.maximum-allocation-mb |
La mémoire maximale en Mo pouvant être allouée à un conteneur dans une file d'attente spécifique. |
Non configuré par défaut. Si définie, cette valeur remplace le paramètre au niveau du cluster et s'applique uniquement à la file d'attente spécifiée. |
|
yarn.scheduler.capacity.<queue-path>.maximum-allocation-vcores |
Le nombre maximal de vCores pouvant être allouées à un conteneur dans une file d'attente spécifique. |
Non configuré par défaut. Si définie, cette valeur remplace le paramètre au niveau du cluster et s'applique uniquement à la file d'attente spécifiée. |
Si une demande de ressources dépasse l'allocation maximale pour une tâche ou un conteneur, le système enregistre l'exception InvalidResourceRequestException: Invalid resource request… dans les journaux de l'application.
Les modifications de configuration YARN ne prennent pas effet
-
Causes possibles
Pour les configurations qui ne prennent pas en charge les mises à jour à chaud, le composant associé n'a pas été redémarré.
Pour les configurations qui prennent en charge les mises à jour à chaud, l'action requise n'a pas été effectuée.
-
Solution : Après avoir modifié une configuration, effectuez les actions de suivi appropriées.
Fichier de configuration
Type
Actions
-
capacity-scheduler.xml
-
fair-scheduler.xml
Configuration du planificateur
Exécutez l'opération refresh_queues sur le ResourceManager.
-
yarn-env.sh
-
yarn-site.xml
-
mapred-env.sh
-
mapred-site.xml
Configuration d'exécution des composants YARN
Redémarrez le composant associé. Par exemple :
-
Si vous modifiez un paramètre tel que YARN_RESOURCEMANAGER_HEAPSIZE dans le fichier yarn-env.sh ou yarn.resourcemanager.nodes.exclude-path dans le fichier yarn-site.xml, vous devez redémarrer le ResourceManager.
-
Si vous modifiez un paramètre tel que YARN_NODEMANAGER_HEAPSIZE dans le fichier yarn-env.sh ou yarn.nodemanager.log-dirs dans le fichier yarn-site.xml, vous devez redémarrer le NodeManager.
-
Si vous modifiez un paramètre tel que MAPRED_HISTORYSERVER_OPTS dans le fichier mapred-env.sh ou mapreduce.jobhistory.http.policys dans le fichier mapred-site.xml, vous devez redémarrer MRHistoryServer.
-
Que faire si le message d'erreur suivant est signalé pour une exception survenue sur un client d'application : Exception while invoking getClusterNodes of class ApplicationClientProtocolPBClientImpl over rm2 after 1 fail over attempts. Trying to fail over immediately ?
Description du problème : Impossible d'accéder au ResourceManager actif. Les journaux du ResourceManager contiennent les informations d'exception suivantes : WARN org.apache.hadoop.ipc.Server: Incorrect header or version mismatch from 10.33..:53144 got version 6 expected version 9.
Cause : Une version ancienne de Hadoop est utilisée. La version de l'appel de procédure distante (RPC) utilisée par le client d'application est incompatible avec la version de Hadoop.
Solution : Utilisez une version de Hadoop compatible avec le client d'application de la version RPC.
Que faire si ResourceManager ne parvient pas à passer automatiquement de l'état Standby à l'état Active ?
Vous pouvez utiliser l'une des méthodes suivantes pour résoudre le problème :
-
Vérifiez que les paramètres permettant d'activer la récupération automatique du statut sont correctement configurés. Les paramètres doivent être définis comme indiqué dans le tableau suivant.
Parameter
Description
yarn.resourcemanager.ha.enabled
Définissez la valeur sur true.
yarn.resourcemanager.ha.automatic-failover.enabled
Définissez la valeur sur true.
yarn.resourcemanager.ha.automatic-failover.embedded
Définissez la valeur sur true.
-
Si le problème persiste après avoir défini les paramètres précédents sur true, utilisez l'une des méthodes suivantes pour approfondir le diagnostic :
Vérifiez que le service ZooKeeper fonctionne normalement.
-
Vérifiez si les données lues par le client ZooKeeper (ResourceManager) dépassent la limite supérieure du tampon du ResourceManager.
Description du problème : les journaux du ResourceManager contiennent les informations d'exception suivantes : Zookeeper error len is out of range! ou Unreasonable length = .
Solution : sous l'onglet Configure de la page du service YARN d'un cluster dans la console EMR, cliquez sur l'onglet yarn-env et définissez le paramètre yarn_resourcemanager_opts sur -Djute.maxbuffer=4194304. Redémarrez ensuite le ResourceManager.
-
Vérifiez si les données écrites par le serveur ZooKeeper dépassent la limite supérieure du tampon du serveur ZooKeeper.
Description du problème : les journaux de ZooKeeper contiennent les informations d'exception suivantes : Exception causing close of session 0x1000004d5701b6a: Len error ***.
Solution : ajoutez le paramètre -Djute.maxbuffer= ou mettez à jour la configuration du paramètre -Djute.maxbuffer= pour chaque nœud du service ZooKeeper. Ce paramètre permet d'augmenter la limite supérieure du tampon. Unité : octets.
-
Vérifiez si le nœud ZooKeeper marqué avec l'indicateur ephemeral et élu leader par les ResourceManagers est occupé par d'autres sessions et n'est pas libéré. Effectuez cette vérification si aucune information d'exception n'apparaît dans les journaux du ResourceManager ou de ZooKeeper. Vous pouvez exécuter la commande stat sur le nœud ZooKeeper marqué avec l'indicateur ephemeral dans ZooKeeper-cli pour vérifier si le nœud ZooKeeper est occupé par d'autres sessions et n'est pas libéré. ${yarn.resourcemanager.zk-state-store.parent-path}/${yarn.resourcemanager.cluster-id}/ActiveStandbyElectorLock correspond au chemin de configuration du nœud ZooKeeper. Le problème peut être causé par des problèmes inconnus liés à la méthode d'élection du leader par défaut ou par un problème dans ZooKeeper.
Nous vous recommandons de modifier la méthode d'élection du leader. Sous l'onglet yarn-site , vous pouvez ajouter un paramètre nommé yarn.resourcemanager.ha.curator-leader-elector.enabled et définir sa valeur sur true. Si le paramètre est déjà configuré, assurez-vous que sa valeur est définie sur true. Redémarrez ensuite le ResourceManager.
Résolution des erreurs OOM de ResourceManager
Le processus ResourceManager peut rencontrer plusieurs types d'erreurs de mémoire insuffisante (OOM). Pour résoudre une erreur OOM, identifiez son type dans les journaux du ResourceManager. Les sections suivantes décrivent les erreurs OOM courantes, leurs causes et les solutions associées.
-
Java heap space, GC overhead limit exceeded ou full garbage collection (full GC) fréquente
-
Cause
Mémoire de tas JVM insuffisante. Le processus ResourceManager ne parvient pas à allouer suffisamment de mémoire pour les nouveaux objets. Même après l'exécution de cycles de full GC, le processus ne peut pas récupérer suffisamment de mémoire de tas et génère l'erreur OOM.
Le ResourceManager conserve de nombreux objets résidents que la JVM ne peut pas récupérer, notamment les métadonnées des clusters, des files d'attente, des applications, des conteneurs et des nœuds. La consommation de mémoire de tas par ces objets augmente avec la taille du cluster ; ainsi, les clusters plus volumineux nécessitent davantage de mémoire. Le ResourceManager conserve également les informations historiques sur les applications, ce qui consomme davantage de mémoire au fil du temps. Même sur un cluster mono-nœud, allouez au moins 2 Go de mémoire de tas.
-
Solution
Si le nœud maître dispose de ressources suffisantes, augmentez la mémoire de tas du ResourceManager en modifiant le paramètre
YARN_RESOURCEMANAGER_HEAPSIZEdans le fichieryarn-env.sh.Pour les clusters de petite taille, envisagez de réduire le nombre d'applications historiques à conserver en modifiant le paramètre
yarn.resourcemanager.max-completed-applicationsdans le fichieryarn-site.xml. La valeur par défaut est 10 000.
-
-
unable to create new native thread
-
Cette erreur se produit lorsque le nombre total de threads sur le nœud ResourceManager atteint la limite du système, empêchant la création de nouveaux threads.
La limite de threads est déterminée par le nombre maximal de processus utilisateur et le nombre maximal d'identifiants de processus (PID). Vous pouvez afficher la limite de processus utilisateur en exécutant la commande
ulimit -a | grep "max user processes"et la limite PID en exécutant la commandecat /proc/sys/kernel/pid_max. -
Solution
Si le nombre de threads disponibles est configuré trop bas, augmentez les valeurs de configuration système appropriées. Pour les nœuds de moindre capacité, cela représente généralement des dizaines de milliers de threads. Pour les nœuds de plus grande capacité, cela peut atteindre des centaines de milliers.
-
Si la limite de threads est correctement configurée, un processus spécifique sur le nœud consomme probablement trop de threads. Vous pouvez alors identifier les processus utilisant le plus grand nombre de threads.
Exécutez la commande
ps -eLf | awk '{print $2}' | uniq -c | awk '{print $2"\t"$1}' | sort -nrk2 | headpour afficher les 10 processus consommant le plus de threads. La sortie est au format : [ID du processus] [Nombre de threads].
-
Pourquoi la localisation échoue-t-elle lorsqu'un nœud commence à exécuter une tâche, et pourquoi les journaux de tâche ne peuvent-ils pas être collectés ou supprimés ?
Description du problème : les journaux du NodeManager contiennent les informations d'exception suivantes : java.io.IOException: Couldn't create proxy provider class org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider.
Cause : les configurations HDFS sont incorrectes.
-
Solution :
-
Les informations d'exception sont encapsulées et ne constituent pas la cause première du problème. Pour identifier la cause première, vous devez examiner les journaux au niveau debug.
-
Dans l'interface CLI d'un client Hadoop, vous pouvez exécuter une commande telle que
hadoop fs -ls /pour accéder à Hadoop. Exécutez ensuite la commande suivante pour activer le débogage :export HADOOP_LOGLEVEL=DEBUG Dans un environnement d'exécution avec la configuration Log4j, ajoutez
log4j.logger.org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider=DEBUGà la fin de la configuration Log4j.
-
L'exemple illustré dans la figure suivante montre que la cause première du problème réside dans la modification des configurations des NameServices par un utilisateur. L'utilisateur a remplacé emr-cluster par hadoop-emr-cluster. Toutefois, le nouveau nœud a utilisé les configurations d'origine des NameServices après une mise à l'échelle horizontale.

Sous l'onglet Configure de la page du service HDFS d'un cluster dans la console EMR, vérifiez que les paramètres sont correctement configurés.
-
Comment gérer une exception de localisation des ressources ?
-
Description du problème :
-
Le conteneur AM utilisé pour traiter les tâches ne démarre pas et le message d'erreur suivant s'affiche :
Application application_1412960082388_788293 failed 2 times due to AM Container for appattempt_1412960082388_788293_000002 exited with exitCode: -1000 due to: EPERM: Operation not permitted. The exception information is the diagnostic information about the failed job. -
Une erreur est signalée lors de la décompression d'un package de ressources d'application après son téléchargement pour la localisation des ressources. Vous pouvez consulter les journaux suivants du NodeManager :
INFO org.apache.hadoop.yarn.server.nodemanager.containermanager.localizer.ResourceLocalizationService: Failed to download rsrc { { hdfs://hadoopnnvip.cm6:9000/user/heyuan.lhy/apv/small_apv_20141128.tar.gz, 1417144849604, ARCHIVE, null },pending,[(container_1412960082388_788293_01_000001)],14170282104675332,DOWNLOADING} EPERM: Operation not permitted at org.apache.hadoop.io.nativeio.NativeIO$POSIX.chmodImpl(Native Method) at org.apache.hadoop.io.nativeio.NativeIO$POSIX.chmod(NativeIO.java:226) at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:629) at org.apache.hadoop.fs.DelegateToFileSystem.setPermission(DelegateToFileSystem.java:186) at org.apache.hadoop.fs.FilterFs.setPermission(FilterFs.java:235) at org.apache.hadoop.fs.FileContext$10.next(FileContext.java:949) at org.apache.hadoop.fs.FileContext$10.next(FileContext.java:945) at org.apache.hadoop.fs.FSLinkResolver.resolve(FSLinkResolver.java:90) at org.apache.hadoop.fs.FileContext.setPermission(FileContext.java:945) at org.apache.hadoop.yarn.util.FSDownload.changePermissions(FSDownload.java:398) at org.apache.hadoop.yarn.util.FSDownload.changePermissions(FSDownload.java:412) at org.apache.hadoop.yarn.util.FSDownload.changePermissions(FSDownload.java:412) at org.apache.hadoop.yarn.util.FSDownload.call(FSDownload.java:352) at org.apache.hadoop.yarn.util.FSDownload.call(FSDownload.java:57) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:744)
-
Cause : le package de ressources de l'application contient des liens symboliques, ce qui entraîne l'exception de localisation des ressources.
Solution : supprimez les liens symboliques contenus dans le package de ressources de l'application.
Que faire si le message d'erreur « No space left on device » s'affiche et qu'un conteneur ne parvient pas à démarrer ou à s'exécuter ?
Causes possibles et solutions :
Vérifiez s'il reste de l'espace disponible sur le disque.
-
Vérifiez la configuration CGroups pour cgroup.clone_children dans les répertoires /sys/fs/cgroup/cpu/hadoop-yarn/ et /sys/fs/cgroup/cpu/.
Si la valeur de cgroup.clone_children est 0, remplacez-la par 1. Exécutez la commande
echo 1 > /sys/fs/cgroup/cpu/cgroup.clone_childrenpour les éléments de démarrage.Si le problème persiste, vérifiez le fichier cpuset.mems ou cpuset.cpus situé dans un répertoire de même niveau. La valeur de cgroup.clone_children dans le répertoire hadoop-yarn doit être identique à celle du répertoire de niveau supérieur.
Vérifiez si le nombre de sous-répertoires du répertoire CGroups dépasse la limite supérieure, qui est de 65 535. Pour afficher le nombre de sous-répertoires, recherchez le fichier de configuration pour YARN et vérifiez la configuration du paramètre yarn.nodemanager.linux-container-executor.cgroups.delete-delay-ms ou yarn.nodemanager.linux-container-executor.cgroups.delete-timeout-ms.
Les noms de domaine ne sont pas résolus dans NodeManager ou pendant l'exécution des tâches. Que faire ?
Description du problème : le message d'erreur suivant s'affiche : java.net.UnknownHostException: Invalid host name: local host is: (unknown).
-
Causes possibles et solutions :
-
Vérifiez que le serveur DNS (Domain Name System) est correctement configuré.
Exécutez la commande suivante pour vérifier la configuration du serveur DNS :
cat /etc/resolv.conf -
Vérifiez que les règles requises sont configurées pour le port 53 du pare-feu.
Si les règles requises sont configurées, désactivez le pare-feu.
-
Vérifiez si le service NSCD (Name Service Cache Daemon) est activé pour le serveur DNS.
Exécutez la commande suivante pour vérifier l'état du service NSCD :
systemctl status nscdSi le service NSCD est activé pour le serveur DNS, exécutez la commande suivante pour désactiver le service NSCD :
systemctl stop nscd
-
Gestion des erreurs OOM de NodeManager
Le processus NodeManager peut rencontrer plusieurs erreurs de mémoire insuffisante (OOM). Pour résoudre une erreur OOM, identifiez le type d'erreur dans les journaux du NodeManager. Les sections suivantes décrivent les types d'erreurs OOM courants, leurs causes et les solutions associées.
-
Java heap space,GC overhead limit exceededou full GC fréquentes-
Cause
Mémoire de tas JVM insuffisante. Le processus NodeManager ne parvient pas à obtenir suffisamment de ressources pour ses objets internes. Cette erreur est générée lorsque le garbage collector, malgré l'exécution de cycles de full GC, ne peut pas libérer suffisamment de mémoire de tas pour allouer de nouveaux objets.
Le processus NodeManager contient peu d'objets résidents, généralement uniquement des informations de base sur le nœud actuel, les applications en cours d'exécution et les conteneurs en cours d'exécution. Ces objets ne consomment pas beaucoup d'espace. En revanche, le cache et le tampon du service shuffle externe peuvent consommer une quantité importante de mémoire de tas. Cette utilisation dépend des configurations liées au service shuffle (telles que
spark.shuffle.service.index.cache.sizeouspark.shuffle.file.bufferpour Spark, etmapreduce.shuffle.ssl.file.buffer.sizeoumapreduce.shuffle.transfer.buffer.sizepour MapReduce) et est proportionnelle au nombre d'applications ou de conteneurs en cours d'exécution utilisant le service shuffle externe. Sur les nœuds de grande capacité exécutant de nombreuses tâches, configurez le processus NodeManager avec une mémoire plus importante. Un minimum de 1 Go est recommandé.
-
Solution
Si le nœud dispose de ressources suffisantes, augmentez la mémoire de tas du NodeManager en modifiant le paramètre
YARN_NODEMANAGER_HEAPSIZEdans le fichieryarn-env.sh.Vérifiez la configuration du service shuffle externe. Par exemple, assurez-vous que la configuration du cache Spark ne consomme pas la majeure partie de la mémoire de tas.
-
-
Direct buffer memory-
Cause
Dépassement de mémoire hors tas, généralement lié au service shuffle externe. Par exemple, les RPC du service shuffle consomment de la mémoire hors tas lorsqu'ils utilisent NIO
DirectByteBuffer.L'utilisation de la mémoire hors tas est proportionnelle au nombre d'applications ou de conteneurs utilisant le service shuffle. Sur les nœuds exécutant de nombreuses tâches intensives en shuffle, assurez-vous que le processus NodeManager dispose d'une mémoire hors tas suffisante.
-
Solution
Vérifiez la configuration de la mémoire hors tas
-XX:MaxDirectMemorySize(dans le paramètreYARN_NODEMANAGER_OPTSdu fichieryarn-env.sh). Si ce paramètre n'est pas défini, la taille de la mémoire hors tas est par défaut égale à la taille de la mémoire de tas. Si la taille actuelle est insuffisante, augmentez la valeur.
-
-
unable to create new native threadPour plus de détails, consultez la section « unable to create new native thread » de la rubrique Résolution des erreurs OOM de ResourceManager.
Échec du démarrage de NodeManager : répertoire cgroup manquant
Message d'erreur : ResourceHandlerException: Unexpected: Cannot create yarn cgroup Subsystem:cpu Mount point:/proc/mounts User:hadoop Path:/sys/fs/cgroup/cpu/hadoop-yarn
Cause : un redémarrage inattendu de l'instance ECS, souvent provoqué par un défaut du noyau (un problème connu dans la version 4.19.91-21.2.al7.x86_64), détruit les données en mémoire du groupe de contrôle CPU et invalide le cgroup.
-
Solution : modifiez le script bootstrap pour les groupes de nœuds existants et mis à l'échelle horizontalement afin de créer le répertoire cgroup et configurez le fichier
rc.localpour recréer automatiquement ce répertoire à chaque démarrage de l'instance.# enable cgroups mkdir -p /sys/fs/cgroup/cpu/hadoop-yarn chown -R hadoop:hadoop /sys/fs/cgroup/cpu/hadoop-yarn # enable cgroups after reboot echo "mkdir -p /sys/fs/cgroup/cpu/hadoop-yarn" >> /etc/rc.d/rc.local echo "chown -R hadoop:hadoop /sys/fs/cgroup/cpu/hadoop-yarn" >> /etc/rc.d/rc.local chmod +x /etc/rc.d/rc.local
Configuration inefficace des ressources NodeManager
Description : après avoir modifié les paramètres yarn.nodemanager.resource.cpu-vcores et yarn.nodemanager.resource.memory-mb, enregistré la configuration et redémarré NodeManager, les comptes de ressources ne sont pas mis à jour.
Cause : ces paramètres doivent être appliqués au niveau du groupe de nœuds, car les instances d'un groupe de nœuds peuvent avoir des spécifications CPU et mémoire différentes.
Solution : dans la console E-MapReduce (EMR), appliquez les paramètres de ressources au groupe de nœuds du NodeManager. Pour plus d'informations, consultez la rubrique Gérer les éléments de configuration. Sous l'onglet Configure du service YARN, basculez le filtre vers Node Group Configuration. Sélectionnez le groupe de nœuds cible, tel que emr-core (CORE), et modifiez les paramètres dans le sous-onglet yarn-site.xml.
Dépannage des nœuds non sains
-
Causes
Le vérificateur d'intégrité des disques marque un nœud comme non sain si le ratio entre les répertoires sains et le nombre total de répertoires tombe en dessous du seuil défini par le paramètre
yarn.nodemanager.disk-health-checker.min-healthy-disksdansyarn-site.xml(par défaut : 0,25). Par exemple, sur un nœud NodeManager doté de quatre disques, le nœud devient non sain uniquement si les répertoires des quatre disques sont non sains. Dans le cas contraire, le rapport d'état du NodeManager indique simplement quelocal-dirs are badoulog-dirs are bad. Pour plus d'informations, consultez la rubrique Que faire si le message « local-dirs are bad » ou « log-dirs are bad » est signalé ?.Problème signalé par le script de vérification de l'intégrité du NodeManager : cette vérification est désactivée par défaut. Vous pouvez l'activer en définissant le paramètre
yarn.nodemanager.health-checker.script.pathdansyarn-site.xmlsur le chemin d'accès à un script de vérification de l'intégrité.
-
Solutions
Pour les problèmes de disque, consultez la rubrique Que faire si le message « local-dirs are bad » ou « log-dirs are bad » est signalé ?.
Pour les problèmes signalés par le script de vérification de l'intégrité, résolvez le problème en fonction de votre script personnalisé.
Problèmes de disque des nœuds : « local-dirs are bad » ou « log-dirs are bad »
-
Cause : Le vérificateur d'intégrité des disques contrôle périodiquement que les répertoires
local-dirs(cache des dépendances de tâches, des données intermédiaires et d'autres fichiers) etlog-dirs(répertoire des journaux d'exécution des tâches) respectent les conditions suivantes. Tout répertoire ne satisfaisant pas à une condition est marqué comme défectueux.Lisible
Accessible en écriture
Exécutable
-
L'utilisation du disque reste inférieure au seuil configuré. Ce paramètre est contrôlé par
yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentagedans le fichieryarn-site.xml, dont la valeur par défaut est 90 %.L'espace disque disponible est supérieur à l'espace libre minimal requis. Ce paramètre est contrôlé par
yarn.nodemanager.disk-health-checker.min-free-space-per-disk-mbdans le fichieryarn-site.xml, dont la valeur par défaut est 0.
-
Solution
-
Un espace disque insuffisant est généralement à l'origine de ce problème. Si l'un des scénarios suivants s'applique, envisagez d'ajouter des disques :
Le nœud NodeManager dispose de spécifications élevées et exécute de nombreuses tâches.
La capacité du disque est relativement faible.
Les tâches dépendent de volumes importants de données ou de fichiers volumineux.
Les tâches génèrent une grande quantité de données intermédiaires.
Les journaux des tâches sont volumineux et consomment beaucoup d'espace disque.
Vérifiez le paramètre
yarn.nodemanager.localizer.cache.target-size-mbdans le fichieryarn-site.xml. Si cette valeur est trop élevée par rapport à la capacité du disque, le cache des tâches historiques peut occuper un espace disque excessif. Le système nettoie automatiquement ce cache uniquement lorsqu'il dépasse la taille configurée.Si un disque endommagé est à l'origine du problème, consultez Remplacer un disque local endommagé dans le cluster.
-
Que faire si le message d'erreur « User [dr.who] is not authorized to view the logs for application *** » s'affiche ?
Description du problème : Les informations illustrées ci-dessous s'affichent lors de l'ouverture de la page des journaux.

-
Cause : Les règles de liste de contrôle d'accès (ACL) sont vérifiées lorsque vous accédez à la page des journaux NodeManager. Si les règles ACL sont activées et qu'un utilisateur distant souhaite consulter les journaux d'une application, cet utilisateur doit remplir l'une des conditions suivantes :
L'utilisateur distant est l'administrateur.
L'utilisateur distant est le propriétaire de l'application.
L'utilisateur distant respecte les règles ACL personnalisées pour l'application.
Solution : Vérifiez si l'utilisateur distant remplit l'une des conditions précédentes.
Que faire si le message d'erreur « HTTP ERROR 401 Authentication required » ou « HTTP ERROR 403 Unauthenticated users are not authorized to access this page » s'affiche ?
-
Description du problème : Une erreur HTTP ERROR 401 ou HTTP ERROR 403 se produit lors de l'accès à une interface utilisateur web ou de l'appel d'une API RESTful. La figure suivante illustre les détails de l'erreur HTTP ERROR 401.

Cause : YARN utilise la méthode d'authentification simple et n'autorise pas l'accès anonyme. Pour plus d'informations, consultez la section Authentication for Hadoop HTTP web-consoles de la documentation officielle d'Apache Hadoop.
-
Solutions :
Méthode 1 : Configurez un paramètre d'URL pour spécifier un utilisateur distant, par exemple user.name=***.
Méthode 2 : Dans la section Configuration Filter de l'onglet Configure de la page du service HDFS d'un cluster dans la console EMR, recherchez le paramètre hadoop.http.authentication.simple.anonymous.allowed et définissez sa valeur sur true pour autoriser l'accès anonyme. Pour plus d'informations sur ce paramètre, consultez la section Authentication for Hadoop HTTP web-consoles de la documentation officielle d'Apache Hadoop. Redémarrez ensuite le service HDFS. Pour plus d'informations, consultez la rubrique Restart a service.
Pourquoi la valeur affichée pour TotalVcore est-elle incorrecte ?
Dans la section des API RESTful du cluster ou des métriques, située dans le coin supérieur droit de l'interface utilisateur web de YARN, la valeur affichée pour TotalVcore est incorrecte. Il s'agit d'un problème de logique de calcul pour TotalVcore dans les versions d'Apache Hadoop antérieures à la 2.9.2. Pour plus d'informations, consultez la page Total #VCores in cluster metrics is wrong when CapacityScheduler reserved some containers de la documentation officielle d'Apache Hadoop.
Ce problème est corrigé dans les versions EMR V3.37.x, EMR V5.3.x et leurs versions mineures ultérieures.
Que faire si les informations relatives à une application affichées sur l'interface utilisateur web de TEZ sont incomplètes ?
Ouvrez les Developer tools de votre navigateur pour diagnostiquer le problème.
Si vous identifiez le problème lors de l'accès à une adresse au format http://<rmAddress>/ws/v1/cluster/apps/APPID, une cause possible est que l'application a été supprimée par ResourceManager. Par défaut, ResourceManager dans YARN conserve les informations d'un maximum de 1 000 applications. Les applications dépassant ce nombre maximal sont supprimées selon l'ordre de leur démarrage.
Si vous identifiez le problème lors de l'accès à une adresse au format http://<tsAddress>/ws/v1/applicationhistory/... et que le code d'erreur 500 indiquant que l'application est introuvable est renvoyé, une cause possible est l'échec du stockage des informations de l'application ou leur suppression par le magasin Timeline. Vous pouvez vérifier la configuration du paramètre yarn.resourcemanager.system-metrics-publisher.enabled pour déterminer si le stockage des informations de l'application a échoué. Vous pouvez également vérifier la durée de vie (TTL) de LevelDB pour déterminer si les informations de l'application ont été supprimées par le magasin Timeline.
-
Si vous identifiez le problème lors de l'accès à une adresse au format http://<tsAddress>/ws/v1/timeline/... et que le code 200 est renvoyé mais que NotFound s'affiche dans le code, effectuez l'opération suivante :
-
Consultez les informations imprimées au démarrage du service syslog AM. Vous pouvez vérifier les informations d'initialisation normales suivantes :
[INFO] [main] |history.HistoryEventHandler|: Initializing HistoryEventHandler withrecoveryEnabled=true, historyServiceClassName=org.apache.tez.dag.history.logging.ats.ATSHistoryLoggingService [INFO] [main] |ats.ATSHistoryLoggingService|: Initializing ATSHistoryLoggingService with maxEventsPerBatch=5, maxPollingTime(ms)=10, waitTimeForShutdown(ms)=-1, TimelineACLManagerClass=org.apache.tez.dag.history.ats.acls.ATSHistoryACLPolicyManager -
Si l'exception suivante se produit, la configuration du paramètre yarn.timeline-service.enabled est incorrecte pour l'AM en cours d'exécution. Une cause possible réside dans un problème au niveau de FlowAgent. Une tâche Hive peut être implémentée dans FlowAgent en exécutant une commande Hive ou une commande Beeline. Par défaut, la valeur du paramètre yarn.timeline-service.enabled est définie sur false dans FlowAgent.
[WARN] [main] |ats.ATSHistoryLoggingService|: org.apache.tez.dag.history.logging.ats.ATSHistoryLoggingService is disabled due to Timeline Service being disabled, yarn.timeline-service.enabled set to false
-
Tâche Spark Thrift Server sur l'interface utilisateur web de YARN
Si vous sélectionnez Spark lors de la création d'un cluster, le cluster démarre automatiquement un service Spark Thrift Server par défaut. Ce service utilise les ressources d'un pilote YARN. Par défaut, les tâches Spark Thrift Server demandent des ressources à YARN via ce pilote.
Prise en charge des URL OSS pour yarn.timeline-service.leveldb-timeline-store.path
Le paramètre yarn.timeline-service.leveldb-timeline-store.path ne prend pas en charge les URL de bucket OSS.
Lors de la création d'un cluster Hadoop, le paramètre yarn.timeline-service.leveldb-timeline-store.path prend par défaut la valeur du paramètre hadoop.tmp.dir. Ne modifiez pas le paramètre hadoop.tmp.dir pour HDFS, car cela affecte le paramètre yarn.timeline-service.leveldb-timeline-store.path.
Délais de connexion au serveur Timeline ou utilisation élevée des ressources
L'exécution d'un grand nombre de tâches Tez peut provoquer des délais de connexion lors de l'écriture d'événements dans le serveur Timeline de YARN. Cela se produit parce que le processus Timeline Server consomme des ressources CPU excessives, entraînant une saturation de l'utilisation du processeur du nœud. Cette situation affecte l'exécution des tâches et les services non essentiels, tels que la génération de rapports. Pour résoudre ce problème, modifiez les éléments de configuration suivants.
Dans la console EMR, modifiez les configurations des services Tez et YARN. Pour obtenir des instructions, consultez la rubrique Manage configuration items.
Dans l'onglet tez-site.xml de la page Configure du service Tez, ajoutez le paramètre tez.yarn.ats.event.flush.timeout.millis et définissez sa valeur sur 60000. Ce paramètre définit le délai d'attente pour l'écriture des événements par les tâches Tez dans le serveur Timeline de YARN.
-
Dans l'onglet yarn-site.xml de la page Configure du service YARN, ajoutez ou modifiez les éléments de configuration suivants. Ensuite, sur la page Status du service YARN, redémarrez TimelineServer.
Parameter
Value
Description
yarn.timeline-service.store-class
org.apache.hadoop.yarn.server.timeline.RollingLevelDBTimelineStore
Classe de stockage des événements pour le serveur Timeline de YARN.
yarn.timeline-service.rolling-period
daily
Période de rotation des événements pour le serveur Timeline de YARN.
yarn.timeline-service.leveldb-timeline-store.read-cache-size
4194304
Taille du cache de lecture pour le magasin LevelDB du serveur Timeline de YARN.
yarn.timeline-service.leveldb-timeline-store.write-buffer-size
4194304
Taille du tampon d'écriture pour le magasin LevelDB du serveur Timeline de YARN.
yarn.timeline-service.leveldb-timeline-store.max-open-files
500
Nombre maximal de fichiers ouverts pour le magasin LevelDB du serveur Timeline de YARN.