Я пытаюсь реализовать распараллеливаемый алгоритм с использованием Apache hadoop, однако мне приходится сталкиваться с некоторыми проблемами при попытке перенести файл из локальной файловой системы в hdf. Исключение контрольной суммы возникает при попытке прочитать или передать файл.
Странно, что некоторые файлы успешно скопированы, а другие - нет (я пробовал с двумя файлами, один немного больше другого, оба они небольшие по размеру). Еще одно замечание, которое я сделал, заключается в том, что метод Java FileSystem.getFileChecksum возвращает во всех случаях null.
Небольшой фон для того, что я пытаюсь достичь: я пытаюсь записать файл в hdfs, чтобы иметь возможность использовать его как распределенный кеш для задания mapreduce, которое я написал.
Я также попробовал команду hadoop fs -copyFromLocal от терминала, и результат был таким же, как и при использовании кода Java.
Я смотрел по всему Интернету, включая другие вопросы здесь, в stackoverflow, но мне не удалось решить проблему. Имейте в виду, что я до сих пор совершенно новичок в hadoop, поэтому любая помощь очень ценится.
Я прикрепляю трассировку стека ниже, которая показывает, что выбрасываемые исключения. (В этом случае я опубликовал трассировку стека, полученную из команды hadoop fs -copyFromLocal из терминала)
[email protected]:~/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