报错提示说原文件已经被视为bad datanode了,具体不知道怎么被视作的。参考hadoop错误解决方案:
先看看文件是否有写权限。
往空文件中追加就相当于直接写文件,所以能追加进去,而往有内容的文件中追加不进去是因为datanode节点数不够三个,其他虚拟机没有开无法进行文件备份。
解决方法1:
至少打开三个节点。
解决方法2:
修改hdfs-site.xml文件,添加或者修改如下两项:
< property> < name> dfs.client.block.write.replace-datanode-on-failure.enable </ name> < value>true</ value> </ property> < property> < name> dfs.client.block.write.replace-datanode-on-failure.policy </ name> < value>never</ value> </ property>
添加或修改完成后,重试即可。
解决方法3:
在客户端的代码里面加入:
conf = new Configuration(); conf.set("dfs.client.block.write.replace-datanode-on-failure.policy", "NEVER" ); conf.set("dfs.client.block.write.replace-datanode-on-failure.enable", "true" );