[HDFS学习笔记]数据流操做

写数据流程

微信截图_20200224122025.png
注意:微信

  • 客户端先实例化一个分布式文件系统的类,并建立输出流FSDataOutputStream的对象.
  1. FSDataOutputStream会向NameNode请求上传文件到XXX路径
  2. NameNoed 会先作一系列检测,好比文件是否已存在,若存在则返回文件已存在的错误,用户是否有权限。若没有问题则返回能够上传的消息。
  3. 客户端须要知道本身应该把文件上传到哪一个DataNode,所以依然由FSDataOutputStream向NameNode 询问.
  4. NameNode根据到客户端的节点距离 返回相应的DataNode及位置 如dn1,dn2,dn3三个节点(备份)
  5. 客户端向DataNode1请求创建Block传输通道,DataNode1收到请求后 向DataNode2一样发送创建通道请求,DataNode2也向DataNode3发送...
  6. DataNode 从后往前依次回应,最后返回给客户端
  7. 客户端开始以packet的形式传递数据给DataNode1, DataNode1把数据先存至内存队列ByteBuff当中,并将该数据序列化后存至本地Block,同时ByteBuffer的数据会传给DataNode2的ByteBuffer,...
  8. 数据接收完毕后 从后面依次应答 传递完毕,最后应答给客户端, 客户端再向NameNode回应 传输完成的消息
再从代码层面理解这个过程

微信截图_20200224131039.png

微信截图_20200224130613.png

微信截图_20200224130955.png

读数据过程

微信截图_20200224142953.png
1.先建立一个DFS实例,向NameNode发送下载请求分布式

  1. NameNode 返回该文件的元数据,包括了数据块的起始位置
  2. 客户端向DataNode 请求读取数据块
  3. 若是须要的数据块在一台机器上 则一次传输就返回。若该数据块损坏或不在该DataNode上 则还须要去相应的DataNode以相同的方式请求数据
  4. 客户端收到数据后写入本地磁盘.
代码层面

微信截图_20200224144102.png

微信截图_20200224144135.png

节点距离计算

节点距离: 两个节点到达最小公共祖先的距离和
最小公共祖先 通常指 机架,集群的路由器
例子:
微信截图_20200224132147.pngspa

相关文章
相关标签/搜索