HDFS读写流程
1.客户端申请上创建文件
2.响应是否可以上传
3.请求上传第一个block
4.返回DN1,2,3,表示采用这三个节点存储数据
dn1第一个就是最近的,后面两个是根据他选出来的
5.向DN请求建立通道,dn1,dn2,dn3,串联请求
6.向客户端返回可以传
7.客户端传给dn1,dn1一边落盘,一边给dn2传输,边存的时候就边发的,有一个待写的队列,不是一个个发的
8.第二个块和第一个一样
9.数据传输完毕
中间有几个问题呢?
-
两次dn的选择是完全独立的选择,同一个文件,两块根本都不在一个dn上。
hdfs存储数据的最小的单位是块,同一块在一起,但同一个文件,不一定在一起 -
在建立通道的过程失败了,上传就失败了
-
在传输数据的过程中失败了,上传是仍然可以正常进行的,而且会给你返回成功的信号,会触发自动备份。来备份数据。这就是hdfs的上传的流程
hdfs的下载文件的流程
- 申请下载文件,nd响应文件是否存在
- 如果存在,那么hfds会创建一个输入流
- nd会返回一个list,里面有三个节点的信息
- client与请求建立通道dn1,dn2和dn3是备胎(三个里面有一个活着就行了)
- 客户端开始申请下载第二块
- 数据传输完毕
节点距离
1.拓扑距离最近
2.另外几个节点该怎么选择呢?同时为了确保安全性能性能
1.首先这些节点一定不会跨数据中心
2.一个节点在同一机架的不同位置
3.一个节点在不同机架的不同位置