spark-shell报错:java.io.IOException: Failed to replace a bad datanode on the existing pipeline due to

问题

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 都不建议开启

猜你喜欢

转载自blog.csdn.net/weixin_49588575/article/details/130615590