在HDFS中写文件时,如果采用默认的3副本策略,数据是通过管道(Pipeline)的方式进行传输的(例如:Client -> DataNode 1 -> DataNode 2 -> DataNode 3)。 如果在写完第一副本(DataNode 1)后,写入第二副本(DataNode 2)时发生失败,整个写操作并不会立即失败。HDFS 会触发自动的容错机制,这个过程被称为管道恢复(Pipeline Recovery)。 以下是具体的发生过程和处理步骤: 1. 发现错误与中断管道 当 DataNode 2 发生故障(如宕机、网络不通、磁盘写满等),DataNode 1 会发现无法将数据发给 DataNode 2,或者客户端迟迟收不到来自 DataNode 2 的 ACK 确认包。 此时,当前的写入管道会被立即关闭。 客户端(DFSClient)将已经发送但未收到确认的数据包(Packets)重新放回数据队列的顶部,以确保数据不会丢失。 2. 剔除故障节点并更新标记 客户端会与 NameNode 进行通信,报告该节点故障。 NameNode 会为当前正在写入的 Block 分配一个新...