1. 数据的上传流程
- 在hdfs中客户端要上传文件首先要向namenode发起请求
- namenode会根据上传文件的信息和集群存储状态信息进行规划元数据.
- 在namenode规划完元数据后,会将请求成功的信息和元数据信息传递给客户端
- 在客户端接收到namenode的元数据信息后,首先会进行解析元数据信息,然后会根据元数据信息的内容,将文件进行分块上传,在上传文件之前,首先会跟所要上传文件的datanode请求建立连接通道
- datanode接收到客户端的请求后,通道建立成功,并且将成功的信息返回给客户端
- 在通道建立好之后,客户端首先会在本地通过IO流读取文件,然后根据分布式网络输出流将文件上传到namenode,分布式网络输出流,会将本地IO读取的字节转变为数据包的形式进行上传,这样可以增加传输效率,如果还是一个字节一个字节的进行传输,那效率会比较低
nanode通过分布式网络输入流接收到数据,在通过本地输出流,将文件存储到本地中,同时会将数据的副本,同时通过输入输出流传输到其他节点
- 在数据块上传成功后,namenode会将上传成功的信息,回传给客户端,整个数据上传流程结束
在数据上传过程中要注意,客户端在将数据传输到第一个节点后,如果这个过程中这个节点宕机,或者发生其他情况,导致数据无法正常上传,那么数据就会上传失败,主节点会重新规划元数据,然后进行再次的上传,如果客户端已经成功的将数据块上传到第一个节点上后,那么这个数据块就是上传成功了,在第一个节点将数据的副本传输到其他节点上时,某个接收数据副本的节点宕机了,不会影响第一个节点将数据上传成功的信息返回给客户端,后续会根据datanode和namenode的心跳机制,将数据的副本存储到其他节点上的.
2. 数据的下载流程
- 客户端在下载数据的时候,首先会向namenode发起请求.
- name在接收到客户端下载数据的请求的时,将该数据的元数据信息和请求成功的信息一同返回给客户端
- 客户端在接收到元数据信息后,会将元数据信息进行解析,然后根据元数据信息分别请求不同的节点
- datanode在接受到客户端的请求后,客户端开始下载数据