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 读数据流程(下载)
- 客户端在下载数据的时候,首先会向namenode发起请求.
- namenode在接收到客户端下载数据的请求的时,将该数据的元数据信息和请求成功的信息一同返回给客户端
- 客户端在接收到元数据信息后,会将元数据信息进行解析,然后根据元数据信息分别请求不同的节点
- datanode在接受到客户端的请求后,客户端开始下载数据