我们先来看下面一张图
当客户端需要上传数据到HDFS的时候
- 客户端先创建一个分布式文件系统对象,向NameNode管理节点数据目录的老大提交上传文件请求
- NameNode会先查看你是否有上传文件的权限如果通过之后再查看要上传的文件是否已经存在,然后响应给客户端是否可以上传文件
-
客户端请求第一个 Block上传到哪几个DataNode服务器上。
-
NameNode会根据存储节点来选择:首先选择本地节点,其次是同个机架上的一个节点,最后是其他机架的另一个节点,返回给客户端可以存储的地点
-
客户端创建数据流,这个时候大家就要思考一个问题,如果客户端向每个节点一个一个写入数据,如果其中一个节点因为硬件等方面问题写入时间很久,这个写过程就要等待很久,那么可以先创建一个传输管道,先向本地节点建立文件传输管道,如A-B-C
-
建立之后给客户端响应说我们已经建立完毕
-
客户端以chunk 512B的数据和4B校验位作为一个单位也就是516B,封装在容量为64K的packet里面进行传输,每次传输以Packet为单位
-
最后数据传输成功啦