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
<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部落格
我有一杯酒,足以慰風塵。