hadoop原理加强之HDFS读写流程[上传下载流程和原理]

1 写数据流程(上传)

1 客户端请求namenode上传文件数据(大小 , 物理切块大小, 副本个数)

2 namenode接收到客户端的上传请求以后, 各种校验(权限 , 存储容量,分配元数据信息)

3 客户端收到namenode的ok响应

4 客户端请求namenode上传第一块数据, NN返回第一块数据的元信息

5 客户端和返回的元数据中的3台机器建立连接通道 ,

6 返回OK

7 客户端本地读取待上传文件的第一块数据的内容 io.read   length=128M

8 本地流一边读取数据 一边转换成分布式输出流(DistributeOutputStream)[封装字节数据为数据包 提高传输效率]

9 分布式输出流输出数据包到lx01在lx01上接收数据, 一边写到本地 一边输出给linux02 Linux02 传输给Linux03

10 linux01 02 03 都会将数据存储到本地的指定目录, 目录结构一样

11 当集群中有一个数据块存储成功 , 当次上传的数据块就是成功 , 如果副本个数不够,后续的NN会自动维护副本个数

12 返回ok 上传成功

上传后续的数据块的流程执行   4  --- 12 步

在数据上传过程中要注意,客户端在将数据传输到第一个节点后,如果这个过程中这个节点宕机,或者发生其他情况,导致数据无法正常上传,那么数据就会上传失败,主节点会重新规划元数据,然后进行再次的上传,如果客户端已经成功的将数据块上传到第一个节点上后,那么这个数据块就是上传成功了,在第一个节点将数据的副本传输到其他节点上时,某个接收数据副本的节点宕机了,不会影响第一个节点将数据上传成功的信息返回给客户端,后续会根据datanode和namenode的心跳机制,将数据的副本存储到其他节点上的.
 

2 读数据流程(下载)

  1. 客户端在下载数据的时候,首先会向namenode发起请求.
  2. namenode在接收到客户端下载数据的请求的时,将该数据的元数据信息和请求成功的信息一同返回给客户端
  3. 客户端在接收到元数据信息后,会将元数据信息进行解析,然后根据元数据信息分别请求不同的节点
  4. datanode在接受到客户端的请求后,客户端开始下载数据

猜你喜欢

转载自blog.csdn.net/qq_37933018/article/details/107225930