Comment quelqu'un peut-il réparer un HDFS qui est corrompu? J'ai regardé sur le site Web Apache/Hadoop et il a dit que sa commande fsck
, ne corrige pas le problème. J'espère que quelqu'un qui a déjà rencontré ce problème peut me dire comment résoudre ce problème.
Contrairement à un utilitaire fsck traditionnel pour les systèmes de fichiers natifs, cette commande ne corrige pas les erreurs détectées. Normalement, NameNode corrige automatiquement la plupart des échecs récupérables.
Lorsque j'ai exécuté bin/hadoop fsck / -delete
, il répertoriait les fichiers endommagés ou les blocs manquants. Comment puis-je le rendre non corrompu? C'est sur une machine d'entraînement donc je pourrais tout détruire, mais quand nous irons en direct, je ne pourrai pas le "réparer" en balayant tout, alors j'essaie de le comprendre maintenant.
Vous pouvez utiliser
hdfs fsck /
pour déterminer quels fichiers ont des problèmes. Recherchez dans la sortie des blocs manquants ou endommagés (ignorez pour l'instant les blocs sous-répliqués). Cette commande est vraiment Verbose, en particulier sur un système de fichiers HDFS volumineux, aussi je descends normalement à La sortie significative avec
hdfs fsck / | egrep -v '^\.+$' | grep -v eplica
qui ignore les lignes ne contenant que des points et des lignes parlant de réplication.
Une fois que vous avez trouvé un fichier corrompu
hdfs fsck /path/to/corrupt/file -locations -blocks -files
Utilisez cette sortie pour déterminer où peuvent vivre les blocs. Si le fichier est plus grand que la taille de votre bloc, il peut en avoir plusieurs.
Vous pouvez utiliser les numéros de bloc signalés pour faire le tour des codes de données Essayez de rechercher les erreurs de système de fichiers Sur ces machines. Points de montage manquants, code de données non en cours d'exécution, système de fichiers Reformaté/réapprovisionné. Si vous pouvez trouver un problèmede cette façon et ramener le blocage en ligne, ce fichier sera à nouveau en bon état.
Faites mousser le rinçage et répétez jusqu'à ce que tous les fichiers soient en bonne santé ou que vous épuisiez toutes les solutions de rechange à la recherche des blocs.
Une fois que vous avez déterminé ce qui s’est passé et que vous ne pouvez plus récupérer de blocs, utilisez simplement le
hdfs fs -rm /path/to/file/with/permanently/missing/blocks
commande pour que votre système de fichiers HDFS redevienne sain afin que vous puissiez commencer à suivre les nouvelles erreurs à mesure qu’elles se produisent.
Si vous voulez simplement que votre HDFS revienne à l’état normal et ne vous inquiétez pas beaucoup des données, alors
Ceci listera les blocs HDFS corrompus:
hdfs fsck -list-corruptfileblocks
Cela supprimera les blocs HDFS corrompus:
hdfs fsck / -delete
Notez que vous devrez peut-être utiliser Sudo -u hdfs
si vous n'êtes pas l'utilisateur Sudo (en supposant que "hdfs" est le nom de l'utilisateur Sudo).
la solution ici a fonctionné pour moi: https://community.hortonworks.com/articles/4427/fix-under-replicated-blocks-in-hdfs-manually.html
su - <$hdfs_user>
bash-4.1$ hdfs fsck / | grep 'Under replicated' | awk -F':' '{print $1}' >> /tmp/under_replicated_files
-bash-4.1$ for hdfsfile in `cat /tmp/under_replicated_files`; do echo "Fixing $hdfsfile :" ; hadoop fs -setrep 3 $hdfsfile; done