1.client 端向 namenode 请求上传文件, 查看文件是否存在, 是否有权限往 hdfs 写入
2. 如果文件不存在, 权限 OK 就根据副本数 N(例如 2 个), 根据网络拓扑选择 N 个离 client 端最近的 datanode 返回 client.
(把文件切块, 一个一个 block 块的请求 namenode, 返回最优的 datanode,datanode 要定期向 namenode 发送心跳, 默认 3 秒, 看是否存活, 如果死掉, 选择返回的主机时就会排除掉死掉的主机)
3.block1 与返回的其中一台主机建立联系 (dfs01), 这台主机会与另外返回的主机建立联系 (dfs02), 形成管道流.
4.client 把 block 数据线读到内存, 然后切分成 packet 的形式沿着管道流发送, 发送到每台建立联系的主机.
5. 发送 block1 完成后, 从最后一台主机返回 ack 响应, 沿着管道流响应给 client.
6. 发送 block1 完成后, 就发送下一个 block, 同上.
7. 当所有 block 存完后, client 会要求 namenode 关闭管道流.
来源: http://www.bubuko.com/infodetail-2858471.html