7、HDFS的文件写入过程

HDFS的文件写入过程

详细步骤解析:

1、 client发起文件上传请求,通过RPC与NameNode建立通讯,NameNode检查目标文件是否已存在,父目录是否存在,返回是否可以上传;

2、 client请求第一个block该传输到哪些DataNode服务器上;

3、 NameNode根据配置文件中指定的备份数量及机架感知原理进行文件分配,返回可用的DataNode的地址如:A,B,C;

 

注:Hadoop在设计时考虑到数据的安全与高效,数据文件默认在HDFS上存放三份,存储策略为本地一份,同机架内其它某一节点上一份,不同机架的某一节点上一份。

4、 client请求3台DataNode中的一台A上传数据(本质上是一个RPC调用,建立pipeline),A收到请求会继续调用B,然后B调用C,将整个pipeline建立完成,后逐级返回client;

5、 client开始往A上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位(默认64K),A收到一个packet就会传给B,B传给C;A每传一个packet会放入一个应答队列等待应答。

6、 数据被分割成一个个packet数据包在pipeline上依次传输,在pipeline反方向上,逐个发送ack(命令正确应答),最终由pipeline中第一个DataNode节点A将pipelineack发送给client;

7、 当一个block传输完成之后,client再次请求NameNode上传第二个block到服务器。

 

===========

我写的笔记:

HDFS文件的写入过程
第一步:客户端请求namenode需要上传数据。
第二步:namenode进行检测,检测客户端有没有权限上传,客户端上传的文件存不存在等等。如果检查不通过直接抛异常,如果检查通过,告知客户端允许上传。
第三步:客户端请求namenode上传文件的block块在哪里。
第四步:namenode寻找合适的block块地址给客户端。合适的条件:1.datanode的磁盘比较空闲。2.datanode离客户端比较近:网络拓扑图比较近,跨交换机越少越好。3.datanode比较鲜活的。心跳时间比较近的datanode。
第五步:客户端拿到block块之后,然后与对应的datanode进行通信。
第六步:客户端与datanode建立通信连接,使用的pipeline管道长连接,数据全部都以packet的方式,datanode会反向地进行数据的校验,ack校验。
第七步:通过block块的副本机制,将我们的block块复制到其他机器上面去存储。同机架找一台机器存储一份block块。不同机架找一台服务器存储一份block块。即机架感知原理。

问题:如果写入数据出错怎么办?比如:如果一个文件有10个block块,写入到第八个block块的时候出错了,怎么办?
回答:客户端会通知namenode,重新获取一个block块,重新上传。namenode会将上传未完成的block块里面的数据消掉。

数据文件默认在HDFS上存放三分,存储策略为:本地一份,同机架其他某一节点上存一份,不同机架的某一节点上存一份,即机架感知原理。
 

 

相关文章:

  • 2021-11-20
  • 2021-04-26
  • 2021-04-28
  • 2021-08-08
  • 2021-07-03
  • 2021-06-17
  • 2021-08-11
猜你喜欢
  • 2022-02-07
  • 2022-01-05
  • 2021-05-29
  • 2021-10-15
  • 2021-06-27
  • 2021-06-10
  • 2022-12-23
相关资源
相似解决方案