Hadoop 3.x|第六天|HDFS的读写流程

写数据流程

  1. 客户端向NameNode请求上传文件
  2. NameNode首先检查是否可以上传文件:检查权限和目录结构,即文件是否存在。
  3. 然后NameNode响应可以上传文件
  4. 客户端请求上传block,请求NameNode返回DataNode。
  5. NameNode返回DataNode的节点,表示用这几个节点存储数据。
  6. 客户端和第一个DataNode请求建立传输通道,然后第一个DataNode同第二个建立通道,第二个和第三个建立通道。
  7. 客户端开始往 dn1 上传第一个 Block(先从磁盘读取数据放到一个本地内存缓存),以 Packet 为单位(64k),dn1 收到一个 Packet 就会传给 dn2,dn2 传给 dn3;
  8. dn1 每传一个 packet会放入一个应答队列等待应答。

节点距离计算

在HDFS写数据的过程中,NameNode会选择距离待上传数据最近距离的DataNode接收数据,所以需要知道最近距离的计算方式。

定义

两个节点到达最近的共同祖先的距离总和。

图解

在这里插入图片描述

机架感知

NN返回DN的选择优先级为:
(为了兼顾安全和效率)

  1. 本地节点
  2. 其他机架一个节点
  3. 其他机架另一个节点
    在这里插入图片描述

源码地址

查找 BlockPlacementPolicyDefault,在该类中查找 chooseTargetInOrder 方法。

读数据流程

  1. 客户端请求下载文件
  2. NN判断权限和文件目录,然后返回目标文件的元数据(存储各个块的DN信息)
  3. 客户端创建流获取数据,选择离节点最近的DN开始读取(仍以packet为单位),然后再读DN2,再读DN3,是串行式读取。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值