apache - 在 apache hadoop 中读取或复制到 hdfs 时出现校验和异常

标签 apache hadoop mapreduce

我正在尝试使用 Apache hadoop 实现并行化算法,但是在尝试将文件从本地文件系统传输到 hdfs 时遇到了一些问题。尝试读取或传输文件时抛出校验和异常

奇怪的是,一些文件被成功复制,而另一些则没有(我尝试了 2 个文件,一个比另一个稍大,但都很小)。我的另一个观察是,Java FileSystem.getFileChecksum 方法在所有情况下都返回一个 null

关于我要实现的目标的一些背景知识:我正在尝试将文件写入 hdfs,以便能够将其用作我编写的 mapreduce 作业的分布式缓存。

我还从终端尝试了 hadoop fs -copyFromLocal 命令,结果与通过 java 代码完成时的行为完全相同。

我浏览了整个网络,包括此处关于 stackoverflow 的其他问题,但是我还没有设法解决问题。请注意,我对 hadoop 还是很陌生,所以非常感谢任何帮助。

我附上了下面的堆栈跟踪,它显示了抛出的异常。 (在这种情况下,我已经发布了来自终端的 hadoop fs -copyFromLocal 命令产生的堆栈跟踪)

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

最佳答案

您可能遇到了 HADOOP-7199 中描述的错误.发生的情况是,当您使用 copyToLocal 下载文件时,它还会在同一目录中复制一个 crc 文件,因此如果您修改文件然后尝试执行 copyFromLocal,它将对您的新文件进行校验和,并与您本地的 crc 文件进行比较,并失败并显示非描述性错误消息。

要修复它,请检查您是否有此 crc 文件,如果有,请将其删除并重试。

关于apache - 在 apache hadoop 中读取或复制到 hdfs 时出现校验和异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15434709/

相关文章:

mysql - 包含相关数据的非常大的表。什么样的 DBMS 是最佳的,以及如何对其建模?

hadoop - 如何使用fileStream流式拼花地板文件?

mapreduce - 在 couchbase 中编写 reduce 函数

hadoop - Uber模式配置设置已对齐,但作业无法在Uber模式下执行

java - 在mapreduce程序中未调用reducer

node.js - 无法访问react和非node js后端(apache)服务器应用程序中的进程对象

mysql - 即使连接参数中提供了远程服务器 IP,Sqoop 导入也始终尝试连接到本地 mysql

apache - 页面显示纯文本而不是 html

apache - 重定向除 htaccess 中的少数路径之外的所有路径

java - 记录生成的 CXF 客户端的原始 XML