J'ai un cluster Hadoop avec 18 nœuds de données. J'ai redémarré le nœud de nom il y a plus de deux heures et le nœud de nom est toujours en mode sans échec.
J'ai cherché pourquoi cela pourrait prendre trop de temps et je ne trouve pas de bonne réponse. La publication ici: Hadoop safemode recovery - prend beaucoup de temps est pertinent mais je ne suis pas sûr si je veux/dois redémarrer le nœud de nom après avoir modifié ce paramètre comme cet article le mentionne:
<property>
<name>dfs.namenode.handler.count</name>
<value>3</value>
<final>true</final>
</property>
Dans tous les cas, c'est ce que j'obtiens dans 'hadoop-hadoop-namenode-hadoop-name-node.log':
2011-02-11 01:39:55,226 INFO org.Apache.hadoop.ipc.Server: IPC Server handler 0 on 8020, call delete(/tmp/hadoop-hadoop/mapred/system, true) from 10.1.206.27:54864: error: org.Apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot delete /tmp/hadoop-hadoop/mapred/system. Name node is in safe mode.
The reported blocks 319128 needs additional 7183 blocks to reach the threshold 0.9990 of total blocks 326638. Safe mode will be turned off automatically.
org.Apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot delete /tmp/hadoop-hadoop/mapred/system. Name node is in safe mode.
The reported blocks 319128 needs additional 7183 blocks to reach the threshold 0.9990 of total blocks 326638. Safe mode will be turned off automatically.
at org.Apache.hadoop.hdfs.server.namenode.FSNamesystem.deleteInternal(FSNamesystem.Java:1711)
at org.Apache.hadoop.hdfs.server.namenode.FSNamesystem.delete(FSNamesystem.Java:1691)
at org.Apache.hadoop.hdfs.server.namenode.NameNode.delete(NameNode.Java:565)
at Sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
at Java.lang.reflect.Method.invoke(Method.Java:616)
at org.Apache.hadoop.ipc.RPC$Server.call(RPC.Java:508)
at org.Apache.hadoop.ipc.Server$Handler$1.run(Server.Java:966)
at org.Apache.hadoop.ipc.Server$Handler$1.run(Server.Java:962)
at Java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.Java:416)
at org.Apache.hadoop.ipc.Server$Handler.run(Server.Java:960)
Tout conseil est apprécié. Merci!
Vérifiez les propriétés dfs.namenode.handler.count dans hdfs-site.xml.
dfs.namenode.handler.count dans hdfs-site.xml spécifie le nombre de threads utilisés par Namenode pour son traitement. sa valeur par défaut est 10. Une valeur trop faible de ces propriétés peut provoquer le problème spécifié.
Vérifiez également les blocs manquants ou corrompus hdfs fsck/| egrep -v '^. + $' | grep -v réplique
hdfs fsck/chemin/vers/corrompu/fichier -locations -blocs -fichiers
si les blocs corrompus sont trouvés, supprimez-les. hdfs fs -rm/fichier-avec-blocs-corrompus manquants.