文件读取示意图

hadoop中文件读写的过程

1、首先客户端通过FileSystem(就是HDFS的一个实例)的open方法打开要读取的实例

2、通过RPC调用请求NameNode这个文件的起始块的信息,NameNode会向客户端返回一个带有这个文件的起始块的列表

    这个列表是排好序的,即按照存在起始块的DataNode和客户端的距离(根据网络拓扑结构确定)

3、客户端对最近的DataNode节点调用Read方法读取文件,需要时还会再次向NameNode节点发送请求下一批块的位置信息

4、当读完所有的块客户端关闭连接


文件写入示意图

hadoop中文件读写的过程



1>客户端向NameNode发起写请求,首先在NameNode的系统文件命名空间中新建一个文件名

2>向DataNode节点写数据,写数据的同时DataNode会做异步的复制工作即把Block复制到别的节点上

3>每写一个节点的数据后该DataNode会向客户端发送一个消息,当所有的DataNode(不包括异步复制的DataNode)都向客户    端发送确认消息后表示文件写操作完成


补充:

   A:上传的Block复制到哪些DataNode中

      1>如果客户端运行在HDFS集群内部,那么副本1就放在本机

          如果客户端运行在HDFS集群外部,那么副本1就随机挑选一台存储不繁忙的机器节点

      2>副本2复制到与副本1不在同一个机架上的机器节点上

      3>副本3复制到与副本2同一机架上的不同节点

B:HDFS系统的一致性模型

     1>创建一个文件后能立刻看到文件命名空间上有刚才新建的文件,但是写入的内容不能实时可见

         >>写入的文件大于一个Block后,刚才写入的和前面写入的Block能被新Reader可见

         >>正在写入的Block对外不可见

     2>可以强制同步即强制对外可见

           >>使用FSDataOutputStream.sync()强制同步数据即强制对外可见

            >>这样做会影响性能

相关文章:

  • 2022-12-23
  • 2021-10-15
  • 2021-06-10
  • 2022-12-23
  • 2021-11-25
  • 2021-04-13
  • 2021-09-27
  • 2021-05-06
猜你喜欢
  • 2021-06-17
  • 2021-09-25
  • 2021-04-26
  • 2022-12-23
  • 2021-08-15
  • 2021-10-09
  • 2021-12-23
相关资源
相似解决方案