2016-11-08 32 views
0

我正在实现用于在HDFS中写入的数据节点故障转移,即当块的第一个datanode出现故障时,HDFS仍然可以写入块。HDFS排除AddblockRequestProto中的数据节点

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

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

但是,namenode仍然定位到发生故障的datanodes的块。

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

回答

0

我发现解决方案,首先放弃块,然后请求新块。在以前的设计中,新的请求块不能替代旧的块