总结1 -- HDFS中数据流的读流程的图解与工作原理

目录

一、读操作图解:

二、工作原理:


一、读操作图解:

读操作图解

 

二、工作原理:

1、客户端通过调用FileSystem对象的open()方法期望打开指定的文件。

    :实际上,对于HDFS来说,真正实际的对象是DistributedFileSystem,此对象通过使用RPC(远程过程调用)来调用namenode,来确定文件起始块的位置。

2、向namenode发送读取指定文件的请求,以求得到块中元数据的信息。

3、namenode如果找到元数据的信息,就会返回目标文件的元数据信息

    :对于每一个块,namenode返回存有该块副本的datanode的地址,并根据距离客户端的远近来排序。

4、同时DistrbutedFilesystem对象会返回一个名为FSDataInputStream的对象。

    :FSDataInputStream对象支持文件定位功能,支持客户端通过输入流读取数据

5、客户端对这个输入流调用read方法。

6、FSDataInputStream对象通过地址找到距离最近文件的块所在的datanode。

7、然后通过调用read方法,将数据从datanode返回到客户端。

    注:

  •     读取到块的末端时,FSInputstream关闭与该datanode的连接,然后寻找下一个块的最佳datanode
  •     客户端从流中读取数据时,块均是按照FSInputStream与Datanode新建连接的顺序读取的

8、客户端将block1的数据写入到本地文件中。

9、继续读取block2的数据。

10、将block2的数据传回客户端。

11、将block2的数据追加到block1的后面。

12、客户端完成读取,客户端对FSInputstream调用close方法关闭流。

注意点

  •  在读取数据的时候,如果FSInputStream与DataNode通信时遇到错误,会尝试从这个块 的最近的DataNode读取数据,并且记住那个故障的DataNode,保证后续不会反复读取该节点上后续的块。
  • FInputStream也会通过校验和确认从DataNode发来的数据是否完整。如果发现有损 坏的块,FSInputStream会从其他的块读取副本,并且将损坏的块通知给NameNode
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值