HDFS写数据流程
第一步.跟namenode通信请求(RPC)上传文件,namenode中的元信息检查目标文件是否已经存在,父目录是否存在
第二步.namenode返回后是否可以上传
第三步.客户端再向namenode请求第一个block该传输到那些datanode上
第四步.namenode会返回三台datanode client 请求 3 台 DataNode 中的一台 A 上传数据(本质上是一个 RPC 调用,建立 pipeline),A 收到请求会继续调用 B,然后 B 调用 C,将整个pipeline 建立完成,后逐级返回 client;
第五步.client开始向A上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位64k大小,每512k会调用一次chuck进行校验,通过后写入buffer缓存中,在写入上传datenode的本地且同时传递给B,每传一个packet会放入一个应答队列等待应答
第六步.当一个block传输完成之后,client再次请求namenode上传第二个block服务器,直到全部传输完毕
第七步.如果传输过程中失败,并且不是全部失败,有一个已经传输成功,就认为已经传输成功了,之后namenode会做异步同步