问题
spark-shell在执行一段时间后报错:java.io.IOException: Failed to replace a bad datanode on the existing pipeline due to no more good datanodes being available to try.
并未执行其他指令,系统自动报错
报错信息
没有办法来替换一个坏掉的DataNode节点,因为在已经存在的流水线里没有一个好的DataNode节点可以来更换;
原因
集群共有3个DataNode节点,而设置的默认副本数是3个。在执行写入到HDFS的操作时,当一台Datanode写入失败时,它要保持副本数为3,它就会去寻找一个可用的DataNode节点来写入,可是我的流水线上就只有3 台DataNode节点,所以导致会报错Failed to replace a bad datanode
解决方案
在hdfs-site.xml 文件中添加下面几行代码
<property>
<name>dfs.client.block.write.replace-datanode-on-failure.policy</name>
<value>NEVER</value>
</property>
参考apache官方文档得知 NEVER: never add a new datanode.
相当于 设置为NEVER之后,就不会添加新的DataNode,一般来说,集群中DataNode节点小于等于3 都不建议开启
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)