org.apache.hadoop.fs.ChecksumException: Checksum error

想put文件到hdfs上,遇到org.apache.hadoop.fs.ChecksumException: Checksum error的问题

hadoop fs -put cheap_all /tmp/wanglei/cheap

16/03/24 09:27:52 INFO fs.FSInputChecker: Found checksum error: b[0, 4096]=31303030323037333809747275650a313030303730313939...
org.apache.hadoop.fs.ChecksumException: Checksum error: file:/home/lei.wang/datas/datas_user_label/cheap_all at 0 exp: 1966038764 got: 1549100153
    at org.apache.hadoop.fs.FSInputChecker.verifySums(FSInputChecker.java:323)
    at org.apache.hadoop.fs.FSInputChecker.readChecksumChunk(FSInputChecker.java:279)
    at org.apache.hadoop.fs.FSInputChecker.read1(FSInputChecker.java:228)
    at org.apache.hadoop.fs.FSInputChecker.read(FSInputChecker.java:196)
    at java.io.DataInputStream.read(DataInputStream.java:83)
    at org.apache.hadoop.io.IOUtils.copyBytes(IOUtils.java:78)
    at org.apache.hadoop.io.IOUtils.copyBytes(IOUtils.java:52)
    at org.apache.hadoop.io.IOUtils.copyBytes(IOUtils.java:112)
    at org.apache.hadoop.fs.shell.CommandWithDestination$TargetFileSystem.writeStreamToFile(CommandWithDestination.java:456)
    at org.apache.hadoop.fs.shell.CommandWithDestination.copyStreamToTarget(CommandWithDestination.java:382)
    at org.apache.hadoop.fs.shell.CommandWithDestination.copyFileToTarget(CommandWithDestination.java:319)
    at org.apache.hadoop.fs.shell.CommandWithDestination.processPath(CommandWithDestination.java:254)
    at org.apache.hadoop.fs.shell.CommandWithDestination.processPath(CommandWithDestination.java:239)
    at org.apache.hadoop.fs.shell.Command.processPaths(Command.java:306)
    at org.apache.hadoop.fs.shell.Command.processPathArgument(Command.java:278)
    at org.apache.hadoop.fs.shell.CommandWithDestination.processPathArgument(CommandWithDestination.java:234)
    at org.apache.hadoop.fs.shell.Command.processArgument(Command.java:260)
    at org.apache.hadoop.fs.shell.Command.processArguments(Command.java:244)
    at org.apache.hadoop.fs.shell.CommandWithDestination.processArguments(CommandWithDestination.java:211)
    at org.apache.hadoop.fs.shell.CopyCommands$Put.processArguments(CopyCommands.java:263)
    at org.apache.hadoop.fs.shell.Command.processRawArguments(Command.java:190)
    at org.apache.hadoop.fs.shell.Command.run(Command.java:154)
    at org.apache.hadoop.fs.FsShell.run(FsShell.java:287)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84)
    at org.apache.hadoop.fs.FsShell.main(FsShell.java:340)
put: Checksum error: file:/home/xxx/cheap_all at 0 exp: 1966038764 got: 1549100153

经过一番查找,找出问题所在。

Hadoop客户端将本地文件cheap_all上传到hdfs上时,hadoop会通过fs.FSInputChecker判断需要上传的文件是否存在.crc校验文件。如果存在.crc校验文件,则会进行校验。如果校验失败,自然不会上传该文件。

cd到文件所在路径,ls -a查看,果然存在.cheap_all.crc文件
$ ls -a
.  ..  breakfast_all  cheap_all  .cheap_all.crc  hive_data  receptions_all  .receptions_all.crc

问题就很简单了,删除.crc文件
$ rm .cheap_all.crc

再上传,搞定收工。

遇到找不到依赖项 'org.apache.hadoop:hadoop-mapreduce-clientjobclient:3.3.6' 的情况,通常是在Java项目中使用Maven或Gradle这类构建工具时发生的。这个错误表示你在项目的pom.xml(对于Maven)或build.gradle(对于Gradle)文件中引用了Apache Hadoop MapReduce Job Client 3.3.6版本,但在实际编译或安装过程中,该版本的jar包并未正确添加到项目的类路径中。 解决这个问题的步骤如下: 1. **检查版本信息**:确保你的Maven或Gradle配置中指定的Hadoop版本与实际可用的版本一致。如果不是3.3.6,尝试下载对应版本的JAR包。 2. **添加依赖**: - Maven: 在pom.xml中添加正确的Hadoop依赖。如果是Maven,确保有如下配置: ```xml <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-mapreduce-client-jobclient</artifactId> <version>3.3.6</version> </dependency> ``` - Gradle: 如果使用的是Gradle,应在build.gradle中添加类似: ```groovy implementation 'org.apache.hadoop:hadoop-mapreduce-client-jobclient:3.3.6' ``` 3. **本地仓库查找**:确保你的本地Maven或Gradle仓库已经包含了这个依赖。如果没有,你需要从Maven中央仓库或其他源下载并添加到你的本地仓库。 4. **重新同步/构建**:在Maven中执行 `mvn clean install` 或者在Gradle中执行 `gradle build`,这将强制更新你的项目依赖。 5. **检查网络连接**:如果以上都正常,可能是网络问题导致无法下载依赖。确认你的机器能够访问Maven或Gradle的仓库服务器。 6. **排除冲突**:检查是否有其他依赖项引入了冲突的版本,可能需要调整它们的版本或者排除冲突。 如果你在公司内部环境,可能还需要检查公司的防火墙设置是否允许访问相关的外部库。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值