HDFS数据流

文件写入

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开始互相复制。默认的布局策略是同一个机架不同节点放一个副本、不同机架的节点上放一个副本。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容