Checksum Exception lors de la lecture ou de la copie sur hdfs dans Apache Hadoop
Je suis en train de mettre en œuvre un algorithme parallélisé à l'aide d'Apache hadoop, cependant, je suis confronté à certains problèmes lorsque vous essayez de transférer un fichier du système de fichiers local à hdfs. Un somme de contrôle exception est levée lors de la tentative de lecture ou le transfert d'un fichier.
La chose étrange est que certains fichiers sont copiés avec succès tandis que d'autres ne le sont pas (j'ai essayé avec 2 fichiers, l'un est légèrement plus grand que l'autre, les deux sont de petite taille tout de même). Une autre observation que j'ai faite est que le Java système de fichiers.getFileChecksum méthode, est de retour d'une null dans tous les cas.
Une légère fond sur ce que je suis en train de réaliser: je suis en train d'écrire un fichier hdfs, pour être capable de l'utiliser comme un cache distribué pour le travail de mapreduce que j'ai écrit.
J'ai aussi essayé le hadoop fs -copyFromLocal commande dans le terminal, et le résultat est exactement le même comportement que lorsqu'il est effectué par le code java.
J'ai cherché partout sur le web, y compris d'autres questions ici sur stackoverflow je n'ai cependant pas réussi à résoudre le problème. S'il vous plaît être conscient que je suis encore assez nouveau pour hadoop de sorte que toute aide est grandement appréciée.
Je joins la trace de la pile ci-dessous qui montre l'exception levée. (Dans ce cas, j'ai posté la trace de la pile résultant de la hadoop fs -copyFromLocal commande 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
source d'informationauteur lvella | 2013-03-15
Vous devez vous connecter pour publier un commentaire.
Vous êtes probablement frapper le bug décrit dans HADOOP-7199. Ce qui se passe est que lorsque vous téléchargez un fichier avec
copyToLocal
il copie également un crc fichier dans le même répertoire, donc si vous modifiez votre fichier, puis essayer de fairecopyFromLocal
il va faire une somme de contrôle de votre nouveau fichier et de le comparer à votre local crc fichier et ne parviennent pas à un non descriptif message d'erreur.Pour corriger, s'il vous plaît vérifiez si vous disposez de cette crc fichier, si vous ne venez retirez-la et essayez à nouveau.
Je suis face au même problème, résolu en supprimant .crc des fichiers
Ok, donc j'ai réussi à résoudre ce problème et je suis en train d'écrire la réponse ici au cas où quelqu'un d'autre rencontre le même problème.
Ce que j'ai fait était tout simplement de créer un nouveau fichier et copié tout le contenu du fichier posant problème.
De ce que je peux présumer qu'il ressemble à un crc fichier est créé et attaché à ce dossier particulier, donc par essayer avec un autre fichier, un autre crc vérification sera effectuée. Une autre raison pourrait être que j'ai nommé le fichier attr.txtce qui pourrait être un conflit avec un nom de fichier avec certains autres ressources. Peut-être que quelqu'un pourrait développer encore plus sur ma réponse, car je ne suis pas sûr à 100% sur les détails techniques et ce ne sont que mes observations.
CRC fichier contient le numéro de série pour le bloc de données. Ensemble de données est spiltted dans les Blocs. Chaque bloc magasins metada avec le CRC du fichier à l'intérieur /hdfs/data/dfs/dossier de données. Si certains on fait la correction de la CRC des fichiers...la réelle et actuelle de la CRC numéros de série ne serait pas conforme et il provoque l'ERREUR!! Les meilleures pratiques pour résoudre cette ERREUR consiste à ne remplacer les méta-données du fichier avec CRC fichier.
J'ai eu exactement le même problème et n'a pas fid toute solution. Étant donné que c'était ma première expérience de hadoop, je ne pouvais pas suivre des instructions sur l'internet. J'ai résolu ce problème en formatant mon namenode.