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

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

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

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

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

请您参考如下方法:

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


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!