HDFS 排除 AddblockRequestProto 中的数据节点

HDFS exclude datanodes in AddblockRequestProto

我正在为 HDFS 中的写入实现一个数据节点故障转移,当块的第一个数据节点发生故障时,HDFS 仍然可以写入一个块。

算法是。首先,将识别故障节点。然后,请求一个新块。 HDFS端口api提供了excludeNodes,我曾经告诉Namenode不要在那里分配新块。 failedDatanodes 被识别为失败的数据节点,它们在日志中是正确的。

req := &hdfs.AddBlockRequestProto{
    Src:           proto.String(bw.src),
    ClientName:    proto.String(bw.clientName),
    ExcludeNodes:  failedDatanodes,
}

但是,名称节点仍然将块定位到失败的数据节点。

有人知道为什么吗?我在这里错过了什么吗? 谢谢。

我找到了解决办法,先放弃区块,再申请新区块。在之前的设计中,新请求的块不能替换旧的