web-dev-qa-db-fra.com

Comment réparer les champs HDFS corrompus

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.

52
Classified

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.

82
mobileAgent

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).

11
daemon12

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
0
abc123