HDFS文件读写流程(HADOOP)

GO ON ~

MAIN:

 

读文件流程

 

流程:

  1. 打开分布式文件。调用 分布式文件 DistributeFileSystem.open()。
  2. 从NameNode获取DataNode地址。DistributeFileSystem使用RPC调用NameNode,NameNode返回存有该副本的DataNode地址。DistributeFileSystem返回一个输入流FSDataInputStream对象,这个对象封存了输入流DFSInputStream。
  3. 连接到DataNode。调用 输入流 FSDataInputStream 的read() 方法,从而 输入流 DFSInputStream连接到DataNodes。
  4. 读取DataNode。反复调用read()方法,从而将数据从DataNode传输到客户端。
  5. 读取另外的DataNode知道完成。到达块的末端的时候,输入流DFSInputStream 关闭了 与DataNode连接,寻找下一个DataNode。
  6. 完成读取,关闭连接。即调用FSDataInputStream.close()

 

 

 

写文件流程

流程:

  1. 发送创建文件请求。 调用分布式文件系统 DistributeFileSystem.create()方法。
  2. NameNode中创建文件记录。分布式文件系统DistributeFileSystem发送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发现复本量不足时,会在另外的一个节点创建一个新的复本。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值