java.io.IOException: Failed to replace a bad datanode on the existing pipeline due to no more good d
java.io.IOException: Failed to replace a bad datanode on the existing pipeline due to no more good datanodes being available to try
原因:
無法寫入;我的環境中有3個datanode,備份數量設定的是3。在寫操作時,它會在pipeline中寫3個機器。預設replace-datanode-on-failure.policy是DEFAULT,如果系統中的datanode大於等於3,它會找另外一個datanode來拷貝。目前機器只有3臺,因此只要一臺datanode出問題,就一直無法寫入成功。
解決辦法:
修改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>
對於dfs.client.block.write.replace-datanode-on-failure.enable,客戶端在寫失敗的時候,是否使用更換策略,預設是true沒有問題
對於,dfs.client.block.write.replace-datanode-on-failure.policy,default在3個或以上備份的時候,是會嘗試更換結點嘗試寫入datanode。而在兩個備份的時候,不更換datanode,直接開始寫。對於3個datanode的叢集,只要一個節點沒響應寫入就會出問題,所以可以關掉。