Hadoop put file 错误:fs.FSInputChecker: Found checksum error

Hadoop put file 错误:fs.FSInputChecker: Found checksum error

参考网址:

https://www.cnblogs.com/gpcuster/archive/2011/01/26/1945363.html

错误原因:

启动任务的命令中包含一个参数“-files tb_steps_url_path_dim.txt”

Hadoop客户端需要将机器本地磁盘中的tb_steps_url_path_dim.txt文件上传到DFS中。

在上传的过程中,Hadoop将通过FSInputChecker判断需要上传的文件是否存在进行校验的crc文件,即.tb_steps_url_path_dim.txt.crc,如果存在crc文件,将会对其内容一致性进行校验,如果校验 失败,则停止上传该文件。最终导致整个MR任务无法执行。

crc文件来源

DFS命令

:hadoop fs -getmerge srcDir destFile

这类命令在执行的时候,会将srcDir目录下的所有文件合并成一个文件,保存在destFile中,同时会在本地磁盘生成一个. destFile.crc的校验文件。

DFS命令

:hadoop fs -get -crc src dest

这类命令在执行的时候,会将src文件,保存在dest中,同时会在本地磁盘生成一个. dest.crc的校验文件。

如何避免

在使用hadoop fs -getmerge srcDir destFile命令时,本地磁盘一定会(没有参数可以关闭)生成相应的.crc文件。

所以如果需要修改getmerge获取的文件的内容,再次上传到DFS时,可以采取以下2种策略进行规避:

  1. 删除.crc文件

  2. 将getmerge获取的文件修改后重新命名,如使用mv操作,再次上传到DFS中。

我的解决方式

1.先在linux rm -rf .xxx.crc(别忘记有个点)
2.顺利上传

//先验证有没有crc再进行上传操作
      if(fs.exists(path_FromLocalSourseCRC)){
    	  System.out.println("CRC文件已经存在!,开始删除!");
    	  fs.delete(path_FromLocalSourseCRC, true);
    	  System.out.println("删除成功!");
      }
      System.out.println("开始上传文件:源地址:"+uriFromLocalSourse+"目标地址:"+uriFromLocalTarget);
      
      fs.copyFromLocalFile(false,true,path_FromLocalSourse, path_FromLocalTarget);
      System.out.println("上传成功!");
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值