1. 程式人生 > 其它 >Failed to replace a bad datanode on the existing pipeline due to no more good datanodes being available to try.

Failed to replace a bad datanode on the existing pipeline due to no more good datanodes being available to try.

報錯資訊:Failed to replace a bad datanode on the existing pipeline due to no more good datanodes being available to try. (Nodes: current=[DatanodeInfoWithStorage[192.168.13.130:50010,DS-d105d41c-49cc-48b9-8beb-28058c2a03f7,DISK]], original=[DatanodeInfoWithStorage[192.168.13.130:50010,DS-d105d41c-49cc-48b9-8beb-28058c2a03f7,DISK]]). The current failed datanode replacement policy is DEFAULT, and a client may configure this via 'dfs.client.block.write.replace-datanode-on-failure.policy' in its configuration

  出現這個錯誤是因為我將本地檔案追加到hdfs的txt檔案中。而當我第二次追加時,錯誤資訊變成了

  從第一個報錯資訊,我們可以發現dfs.client.block.write.replace-datanode-on-failure.policy。

  所以我去檢視hadoop中etc/hdfs-site.xml。發現我沒有定義副本數量,所以在其中加上。重啟即可。

 <property>
             <name>dfs.client.block.write.replace-datanode-on-failure.policy</name>
             <value>NEVER</value>
        </property>

    

  原因分析:預設情況下副本數為3個,在執行寫入到HDFS的操作時,當我的一臺Datenode寫入失敗時,它要保持副本數為3,它就會尋找一個可用的DateNode節點來寫入,可時流水線上只有3臺,所有導致報錯Failed to replace a bad datanode on the existing pipeline due to no more good datanodes being available to try;

  

   檢視自己已經存在的副本數量,位置在hadoop中etc/hdfs-site.xml。不存在以下幾行程式碼則副本數預設為3。參考apache官方文件得知 NEVER: never add a new datanode

相當於 設定為NEVER之後,就不會新增新的DataNode,一般來說,叢集中DataNode節點小於等於3 都不建議開啟

<property>
                <name>dfs.replication</name>
                <value>3</value>
        </property>

  什麼是流水線:Hadoop架構: 流水線(PipeLine) - 執生 - 部落格園 (cnblogs.com)

  參考:(13條訊息) java.io.IOException Failed to replace a bad datanode_fffffyp的部落格-CSDN部落格

我有一杯酒,足以慰風塵。