pipeline 写入的三个阶段
1.pipeline setup:Client 发送一个写请求沿着 pipeline 传递下去,最后一个 DataNode 收到后发回一个确认消息。Client 收到确认后,pipeline 设置准备完毕,可以往里面发送数据了。
2.data streaming:Client 将一个 block 拆分为多个 packet 来发送(默认一个 block 64MB,太大所以需要拆分)。Client 持续往 pipeline 发送 packet,在收到 packet ack 之前允许发送 n 个 packet,n 就是 Client 的发送窗口大小(类似 TCP 滑动窗口)
3.close:Client 在所有发出的 packet 都收到确认后发送一个 Close 请求,
pipeline 上的 DataNode 收到 Close 后将相应 replica 修改为 FINALIZED 状态,并向 NameNode 发送 block 报告。NameNode 将根据报告的 FINALIZED 状态的 replica 数量是否达到最小副本要求来改变相应 block 状态为 COMPLETE。
HDFS Pipeline Recovery
从 pipeline setup 错误中恢复
在 pipeline 准备阶段发生错误,分两种情况:
- 新写文件:Client 重新请求 NameNode 分配 block 和 DataNodes,重新设置 pipeline。
- 追加文件:Client 从