玩转大数据大数据工作专题

HDFS数据流

2017-09-24  本文已影响55人  心_的方向

文件写入

image.png
  1. 客户端通过对DistributedFileSystem对象调用create()函数来创建文件
  2. DistributedFileSystem对NameNode创建一个RPC调用,在文件系统的命名空间中创建文件名,但是没有相应的数据块
  3. 在客户端写入数据时,FSDataOutputStream将数据分为一个个的数据包,并写入数据队列,同时向namenode申请一个新的block来存放数据。
  4. 将数据队列中的数据写入到一个datanode中,其余datanode之间(管道线pipeline)传数据包。
  5. 直到收到所有datanode的确认信息后,该数据包才会从确认队列删除
  6. 客户端完成所有数据包的写入后,会对数据流调用close()方法
  7. 通知namenode写入成功。

文件读取

image.png
  1. 客户端通过调用DistributedFileSystem对象的open()方法来打开希望读取的文件。
  2. DistributedFileSystem通过RPC调用namenode,确定文件起的位置。
  3. 客户端对输入流调用read()方法。
  4. 对数据流反复调用read()方法,将数据从datanode传输到客户端。
  5. 当读到block的末尾时,转而读下一个block。

文件复制

  1. NameNode发现文件的文件块不符合最小复制数或者Datanode失效时
  2. NameNode就通知DataNode相互复制文件块
  3. DataNode开始互相复制。默认的布局策略是同一个机架不同节点放一个副本、不同机架的节点上放一个副本。
上一篇下一篇

猜你喜欢

热点阅读