錯誤:java
java.io.IOException: Failed to replace a bad datanode on the existing pipeline due to no more good datanodes being available to trynode
緣由:url
沒法寫入;個人環境中有3個datanode,備份數量設置的是3。在寫操做時,它會在pipeline中寫3個機器。默認replace-datanode-on-failure.policy是DEFAULT,若是系統中的datanode大於等於3,它會找另一個datanode來拷貝。目前機器只有3臺,所以只要一臺datanode出問題,就一直沒法寫入成功。code
解決辦法:xml
修改hdfs-site.xml文件,添加或者修改以下兩項:blog
<property>ip
<name>dfs.client.block.write.replace-datanode-on-failure.enable</name> <value>true</value>get
</property>博客
<property>it
<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的集羣,只要一個節點沒響應寫入就會出問題,因此能夠關掉。
若是,您認爲閱讀這篇博客讓您有些收穫,不妨點擊一下右下角的【推薦】。
若是,您但願更容易地發現個人新博客,不妨點擊一下左下角的【關注我】。
若是,您對個人博客所講述的內容有興趣,請繼續關注個人後續博客,我是【劉超★ljc】。
本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然保留追究法律責任的權利。