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