java.io.IOException:无法添加datanode。 HDFS(Hadoop)

时间:2013-03-11 20:17:40

标签: hadoop io hdfs

我在HDFS(cloudera 2.0.0-cdh4.2.0)上附加文件时遇到错误。 导致错误的用例是:

  • 在文件系统上创建文件(DistributedFileSystem)。的确定
  • 追加先前创建的文件。 错误

    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

有什么想法吗? 谢谢!

1 个答案:

答案 0 :(得分:1)

问题通过在文件系统上运行来解决

hadoop dfs -setrep -R -w 2 /

文件系统上的旧文件将复制因子设置为3, 在dfs.replication中将hdfs-site.xml设置为2将无法解决问题 因为此配置不适用于现有文件。

因此,如果您从群集中删除计算机,则最好检查文件和系统复制因子