HDFS使用appendToFile报错WARN hdfs.DFSClient: DataStreamer Exception java.io.IOException: Failed
报错提示说原文件已经被视为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"
);