HDFS在AddblockRequestProto

时间:2016-11-08 06:12:18

标签: hadoop go hdfs failover

我正在实现一个用于在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。

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

1 个答案:

答案 0 :(得分:0)

我找到了解决方案,首先放弃该块,然后请求新块。在之前的设计中,新请求的块不能替换旧的