1. 客户端发出请求hdfs dfs -put /etc/profile /qf/data
2. namenode查看维护的目录结构,检查/qf/data是否存在,如不存在直接报错”no such file or directory“,如存在返回给客户端同意上传文件请求,将操作写入日志文件
3. 客户端请求上传第一个块,询问namenode块的存储位置
4. namenode查看自己的datanode池,返回给客户端一个datanode列表
5. 客户端发出请求建立pipeline
6. 客户端先把文件写入缓存,达到一个块的大小时,会在客户端和第一个datanode建立连接开始流式的传输数据,这个datanode会一小部分一小部分(4K)的接收数据然后写入本地仓库,同时会把这些数据传输到第二个datanode,第二个datanode也同样一小部分一小部分的接收数据并写入本地仓库,同时传输给第三个datanode...(在流式复制时,逐级传输和响应采用响应队列来等待传输结果。队列响应完成后返回给客户端)
7. 第一个数据块传输完成后会使用同样的方式传输下面的数据块直到整个文件上传完成。
8. 整个文件完成,namenode更新内存元数据