Exception de sum de contrôle lors de la lecture ou de la copie vers hdfs dans apache hadoop

J’essaie d’implémenter un algorithme parallélisé en utilisant Apache hadoop, cependant je suis confronté à certains problèmes lorsque je tente de transférer un fichier du système de fichiers local vers hdfs. Une exception de sum de contrôle est émise lors d’une tentative de lecture ou de transfert d’un fichier.

La chose étrange est que certains fichiers sont copiés avec succès alors que d’autres ne le sont pas (j’ai essayé avec 2 fichiers, l’un est légèrement plus grand que l’autre, mais tous deux sont de petite taille). Une autre observation que j’ai faite est que la méthode Java FileSystem.getFileChecksum renvoie un null dans tous les cas.

Un peu d’arrière-plan sur ce que j’essaie de réaliser: j’essaie d’écrire un fichier sur hdfs, pour pouvoir l’utiliser comme cache dissortingbué pour le travail que j’ai écrit.

J’ai également essayé la commande hadoop fs -copyFromLocal depuis le terminal et le résultat est exactement le même que lorsque le code Java est utilisé.

J’ai regardé partout sur le Web, y compris d’autres questions ici sur stackoverflow mais je n’ai pas réussi à résoudre le problème. S’il vous plaît soyez conscient que je suis encore assez nouveau pour hadoop alors toute aide est grandement appréciée.

Je joins la trace de stack ci-dessous qui montre les exceptions en cours de lancement. (Dans ce cas, j’ai posté la trace de la stack résultant de la commande hadoop fs -copyFromLocal depuis le terminal)

name@ubuntu:~/Desktop/hadoop2$ bin/hadoop fs -copyFromLocal ~/Desktop/dtlScaleData/attr.txt /tmp/hadoop-name/dfs/data/attr2.txt 13/03/15 15:02:51 INFO util.NativeCodeLoader: Loaded the native-hadoop library 13/03/15 15:02:51 INFO fs.FSInputChecker: Found checksum error: b[0, 0]= org.apache.hadoop.fs.ChecksumException: Checksum error: /home/name/Desktop/dtlScaleData/attr.txt at 0 at org.apache.hadoop.fs.ChecksumFileSystem$ChecksumFSInputChecker.readChunk(ChecksumFileSystem.java:219) at org.apache.hadoop.fs.FSInputChecker.readChecksumChunk(FSInputChecker.java:237) at org.apache.hadoop.fs.FSInputChecker.read1(FSInputChecker.java:189) at org.apache.hadoop.fs.FSInputChecker.read(FSInputChecker.java:158) at java.io.DataInputStream.read(DataInputStream.java:100) at org.apache.hadoop.io.IOUtils.copyBytes(IOUtils.java:68) at org.apache.hadoop.io.IOUtils.copyBytes(IOUtils.java:47) at org.apache.hadoop.io.IOUtils.copyBytes(IOUtils.java:100) at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:230) at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:176) at org.apache.hadoop.fs.FileSystem.copyFromLocalFile(FileSystem.java:1183) at org.apache.hadoop.fs.FsShell.copyFromLocal(FsShell.java:130) at org.apache.hadoop.fs.FsShell.run(FsShell.java:1762) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:79) at org.apache.hadoop.fs.FsShell.main(FsShell.java:1895) copyFromLocal: Checksum error: /home/name/Desktop/dtlScaleData/attr.txt at 0 

Vous frappez probablement le bogue décrit dans HADOOP-7199 . Qu’est-ce qui se passe est que lorsque vous téléchargez un fichier avec copyToLocal , il copie également un fichier crc dans le même répertoire, donc si vous modifiez votre fichier et essayez ensuite de faire copyFromLocal , il fera une sum de contrôle de votre nouveau fichier et comparer à votre local Fichier crc et échec avec un message d’erreur non descriptif.

Pour y remédier, veuillez vérifier si vous avez ce fichier crc , si vous le supprimez et réessayez.

Je fais face au même problème résolu en supprimant les fichiers .crc

Ok donc j’ai réussi à résoudre ce problème et j’écris la réponse ici juste au cas où quelqu’un d’autre rencontrerait le même problème.

J’ai simplement créé un nouveau fichier et copié tout le contenu du fichier problématique .

À partir de ce que je peux supposer, il semble que certains fichiers crc soient créés et attachés à ce fichier particulier, donc en essayant avec un autre fichier, une autre vérification de crc sera effectuée. Une autre raison pourrait être que j’ai nommé le fichier attr.txt , qui pourrait être un nom de fichier conflictuel avec une autre ressource. Peut-être que quelqu’un pourrait développer encore plus ma réponse, car je ne suis pas sûr à 100% des détails techniques et ce ne sont que mes observations.

Le fichier CRC contient le numéro de série des données de bloc particulières. Des données entières sont spilttées dans des blocs collectifs. Chaque bloc stocke metada avec le fichier CRC dans le dossier / hdfs / data / dfs / data. Si quelqu’un corrige les fichiers CRC … les numéros de série CRC actuels et actuels ne correspondent pas et cela provoque l’ERREUR !! La meilleure pratique pour corriger cette erreur est de remplacer le fichier de métadonnées par le fichier CRC.

J’ai eu exactement le même problème et je n’ai pas trouvé de solution. Comme c’était ma première expérience de hadoop, je ne pouvais pas suivre certaines instructions sur Internet. J’ai résolu ce problème en formatant mon namenode.

 hadoop namenode -format