hadoop的hdfs读写文件流程

在这里插入图片描述一 读取文件流程

  1. 打开分布式文件-调用分布式文件 DistributedFileSystem.open()方法
  2. 从Namenode获得Datanode地址-DistributedFileSystem 使用RPC调用Namenode,Namenode返回存有该副本的Datanode地址,DistributedFileSystem返回一个输入流FSDatainputstream对象,该对象封存了输入流DFSInputStream
  3. 连接到Datanode-调用输入流FSDatainputstream的read()方法,从而输入流DFSinputstream连接Datanodes
  4. 读取Datanode-反复调用read()方法,从而将数据从DataNode传入到客户端
  5. 读取另外的Datanode直到完成-到达块的末端时候,输入流DFSInputstream关闭与Datanode连接,寻找下一个Datanode
  6. 完成读取,关闭连接-调用输入流FSDataInputstream.close()

在这里插入图片描述二 写入文件流程
1.发送创建文件请求:调用分布式文件系统DistributedFileSystem.create()方法

2.Namenode中创建文件记录:分布式系统DistributedFileSystem发送RPC请求给namenode,namenode检察权限后创建一条记录,返回输出流FSDataOutputStream,封装了输出流DFSOutputStream

3.客户端写入:输出流DFSOutputStream将数据分成一个个的数据包,并写入内部队列,Datastreamer根据Datanode列表来要求namenode分配适合的新快来储存数据备份.一组Datanode构成管线(管线的Datanode之间使用socket流式通信)

4.使用管线传输数据:Datastreamer将数据包流式传输到管线第一个Datanode,第一个Datanode再传到第二个Datanode,知道完成.

5.确认队列,Datanode收到数据后发送确认,管线的Datanode的所有的确认组成一个确认的队列,所有的Datanode都确认,管线数据包删除.

6.关闭:客户端对数据调用close()方法,将剩余所有的数据写入Datanode管线,并联系Namenode且发送文件写入完成信息之前等待确认.

7.Namenode确认

8.故障处理:如过程中发生故障,则先关闭管线,把队列中的所有数据添加回去队列,确保数据包不漏,为另一个正常的Datanode当前数据块制定一个新的标识,并将该标识传送给Namenode,一遍故障Datanode再回复后删除上面的不完整数据块,从管线删除故障的Datanode并把余下的数据块写入余下的正常的Datanode.Namenode发现副本两不足时,会在另一个节点创建新的副本.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章