2016-11-08 33 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

我發現解決方案,首先放棄塊,然後請求新塊。在以前的設計中,新的請求塊不能替代舊的塊