ACK 是否三个备份都写成功之后再确认成功操作?
不是的,只要成功写入的节点数量达到dfs.replication.min(默认为1),那么就任务是写成功的
正常情况下:
① 在进行写操作的时候(以默认备份3份为例),DataNode_1接受数据后,首先将数据写入buffer,再将数据写入DatNode_2,写入成功后将 buffer 中的数据写入本地磁盘,并等待ACK信息
② 重复上一个步骤,DataNode_2写入本地磁盘后,等待ACK信息
③ 如果ACK都成功返回后,发送给Client,本次写入成功
如果一个节点或多个节点写入失败:
① 只要成功写入的节点数量达到dfs.replication.min(默认为1),那么就任务是写成功的。然后NameNode会通过异步的方式将block复制到其他节点,使数据副本达到dfs.replication参数配置的个数
1、HDFS写文件过程分析
http://shiyanjun.cn/archives/942.html
2、Hadoop Pipeline详解
http://dj1211.com/?p=178
1、Hadoop深入学习:解析HDFS的写文件流程
http://flyingdutchman.iteye.com/blog/1900536
2、HDFS 1. 读写流程剖析
https://www.jianshu.com/p/7d1bdd23c460
3、HDFS 异常处理与恢复
http://www.cnblogs.com/mindwind/p/4833098.html