Hadoop HDFS追加文件内容appendToFile/append报错解决方案

Linux下Hadoop HDFS中追加文件内容使用appendToFile(Shell)或fs.append()(Java),遇到的几种报错情况,分别给出自己使用并成功的解决方案:

  1. Shell中报错:appendToFile: Not supported
    这种情况在网上几乎搜不到,直到换了伪分布式配置才不报这个错,之前是单点式配置状态。所以怀疑是单点式配置不能使用appendToFile操作。换成伪分布式只需要修改几个配置文件,具体教程可自行搜索;
  2. (1)java.io.IOException Failed to replace a bad datanode on the existing pipeline due to no more good datanodes being available to try
    (2)org.apache.hadoop.ipc.RemoteException: Failed to APPEND_FILE /data/log for DESClient_NONMAPPERDUCE_1129064282_1 on 10.43.42.24 bacause this file lease is currently owned by Client_NONMAPPERDUCE_1129064282_1 on 10.43.42.24
    (3)org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.protocol.RecoveryInProgressException): Failed to APPEND_FILE /surveillance/2018-01-02/host21-host.log for DFSClient_NONMAPREDUCE_-1806248259_128 on 192.168.1.121 because lease recovery is in progress. Try again later. at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.recoverLeaseInternal(FSNamesystem.java:3145)
    以上典型报错是从其他人的问题复制过来了,因为我自己的报错没有及时保存,只记住了几个关键词。Shell或者Java IDE中出现上面之一的报错,网上有相关的解决方案,就是在Java程序中增加下面两行(如果使用Shell就是修改配置文件内容):
    //Configuration conf = new Configuration();
    conf.set("dfs.client.block.write.replace-datanode-on-failure.policy", "NEVER");
    conf.setBoolean("dfs.client.block.write.replace-datanode-on-failure.enabled", true);
    
    接下来是关键了,很可能会发现即使修改了,运行之后,还会出现上面出现过的报错,解决方案就是:不要再用之前使用追加文件内容命令的源文件和目的文件了!如果仅仅测试,可以另建测试文件,重新上传,然后尝试追加;如果之前的文件还要用,那就复制到新文件里去,再追加。总之,修改程序和配置文件后,appendToFile和fs.append()的对象不能是你之前让程序报错的那俩文件。如果还不行就重启下Hadoop或系统即可。

参考:Hadoop爬坑记——HDFS文件因Hadoop版本原因导致的追加问题
https://community.cloudera.com/t5/Support-Questions/Failed-to-replace-a-bad-datanode-on-the-existing-pipeline/td-p/207711(这个需要那啥才能看,不过有完整的解决方法)

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值