hdfs的文件读取与写入流程


HDFS客户端文件读取过程如下:

  1. 应用程序通过HDFS客户端向NameNode发生远程调用请求。
  2. NameNode收到请求之后,返回文件的块列表信息。块列表信息中包含每个block拷贝的datanode地址。
  3. HDFS 客户端会选择离自己最近的那个拷贝所在的datanode来读取数据。
  4. 数据读取完成以后,HDFS客户端关闭与当前的datanode的链接。

如果文件没有读完,HDFS客户端会继续从NameNode获取后续的block信息,每读完一个块都需要进行校验和验证,如果读取出错,HDFS客户端会通知NameNode,重新选择一个该block拷贝的datanode读数据。


HDFS客户端文件写入过程如下:

1.应用程序通过HDFS客户端向NameNode发起远程过程调用请求。 
2.NameNode检查要创建的文件是否存在以及是否有足够的权限。 
3.如果检测成功,NameNode会返回一个该文件的记录,否则让客户端抛出异常。 
4.HDFS客户端把文件切分为若干个packets,然后向NameNode申请新的blocks存储新增数据。 
5.NameNode返回用来存储副本的数据节点列表。 
6.HDFS客户端把packets中的数据写入所有的副本中。 
7.最后一个节点数据写入完成以后,客户端关闭。

文件写入中的副本策略:

1) Hadoop默认副本策略是将第一个复本放在运行客户端的节点上,即上传文件或者写入文件所在的datanode节点上。如果客户端不在集群中,则就随机选择一个节点。

2) 第二个复本放在与第一个复本不同且随机的另外的机架上。

3) 第三个复本与第二个复本放在相同的机架上。

阅读更多

没有更多推荐了,返回首页