写数据流程节点距离计算
定义图解 机架感知
源码地址 读数据流程
写数据流程- 客户端向NameNode请求上传文件NameNode首先检查是否可以上传文件:检查权限和目录结构,即文件是否存在。然后NameNode响应可以上传文件客户端请求上传block,请求NameNode返回DataNode。NameNode返回DataNode的节点,表示用这几个节点存储数据。客户端和第一个DataNode请求建立传输通道,然后第一个DataNode同第二个建立通道,第二个和第三个建立通道。客户端开始往 dn1 上传第一个 Block(先从磁盘读取数据放到一个本地内存缓存),以 Packet 为单位(64k),dn1 收到一个 Packet 就会传给 dn2,dn2 传给 dn3;dn1 每传一个 packet会放入一个应答队列等待应答。
在HDFS写数据的过程中,NameNode会选择距离待上传数据最近距离的DataNode接收数据,所以需要知道最近距离的计算方式。
定义两个节点到达最近的共同祖先的距离总和。
图解 机架感知NN返回DN的选择优先级为:
(为了兼顾安全和效率)
- 本地节点其他机架一个节点其他机架另一个节点
查找 BlockPlacementPolicyDefault,在该类中查找 chooseTargetInOrder 方法。
读数据流程- 客户端请求下载文件NN判断权限和文件目录,然后返回目标文件的元数据(存储各个块的DN信息)客户端创建流获取数据,选择离节点最近的DN开始读取(仍以packet为单位),然后再读DN2,再读DN3,是串行式读取。



