我正在实现一个datanode故障转移来写入hdfs,当块的第一个datanode发生故障时,hdfs仍然可以写入一个块。
算法是。首先,确定故障节点。然后,请求一个新的块。hdfs端口api提供 excludeNodes
,我曾经告诉namenode不要在那里分配新的块。 failedDatanodes
是已识别的失败数据节点,它们在日志中是正确的。
req := &hdfs.AddBlockRequestProto{
Src: proto.String(bw.src),
ClientName: proto.String(bw.clientName),
ExcludeNodes: failedDatanodes,
}
但是,namenode仍然将块定位到失败的datanodes。
有人知道为什么吗?我错过什么了吗?谢谢您。
1条答案
按热度按时间t5zmwmid1#
我找到了一个解决方案,首先放弃块,然后请求新块。在以前的设计中,新请求的块不能替换旧的块