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

文章描述了在使用Spark-shell时遇到的一个问题,即由于集群中3个DataNode节点中的一个出现故障,而默认副本数设置为3,导致无法找到额外的DataNode进行替换。解决方案是在hdfs-site.xml配置文件中设置`dfs.client.block.write.replace-datanode-on-failure.policy`为`NEVER`,阻止尝试添加新DataNode。但当DataNode节点数量小于等于3时,这种策略并不推荐。
摘要由CSDN通过智能技术生成

问题

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值