我在HDFS(cloudera 2.0.0-cdh4.2.0)上附加文件时遇到错误。 导致错误的用例是:
追加先前创建的文件。 错误
OutputStream stream = FileSystem.append(filePath);
stream.write(fileContents);
然后抛出错误:
Exception in thread "main" java.io.IOException: Failed to add a datanode.
User may turn off this feature by setting dfs.client.block.write.replace-datanode-on- failure.policy in configuration, where the current policy is DEFAULT. (Nodes: current=[host1:50010, host2:50010], original=[host1:50010, host2:50010])
at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.findNewDatanode(DFSOutputStream.java:792)
at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.addDatanode2ExistingPipeline(DFSOutputStream.java:852)
at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.setupPipelineForAppendOrRecovery(DFSOutputStream.java:958)
at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:469)
一些相关的hdfs配置:
dfs.replication
设置为2
dfs.client.block.write.replace-datanode-on-failure.policy
设置为true
dfs.client.block.write.replace-datanode-on-failure
设置为DEFAULT
有什么想法吗? 谢谢!
答案 0 :(得分:1)
问题通过在文件系统上运行来解决
hadoop dfs -setrep -R -w 2 /
文件系统上的旧文件将复制因子设置为3,
在dfs.replication
中将hdfs-site.xml
设置为2将无法解决问题
因为此配置不适用于现有文件。
因此,如果您从群集中删除计算机,则最好检查文件和系统复制因子