Ever tried , Ever failed !
No matter ,Try again ! Fail again , Fail better !

HDFS原理解析(一)

HDFS工作机制

1.概述

HDFS集群三大角色

  • NameNode
    • 负责管理元数据信息
    • 响应客户端请求
  • DataNode
    • 负责管理用户的文件数据块,即文件内容本身
    • 并且通过心跳机制汇报给 NameNode
  • SecondaryNameNode
    • 辅助 NameNode,分担其工作量,定期合并 fsimage 和 edits,并推送给 NameNode
    • 紧急情况下,可辅助恢复 NameNode
2.HDFS 写数据流程

(1)Client 向 NameNode 请求上传文件;

(2)NameNode 检查目录,响应可以上传;

(3)Client 请求上传block1,请求DataNode列表;

(4)NameNode查询DataNode信息,返回可用的DataNode列表node1,node2;

(5)Client请求往node1上传数据,先建立传输管道pipeline,node1收到请求继续调用node2,将整个pipeline建立完成,逐级返回给Client;

(6)Client开始往node1上写入block1的数据,以packet为单位 (默认64K),node1收到一个packet就会传给node2;

(7)每写入一个DataNode都会返回ack信息,node1返回所有的ack信息,之后才会将 packet 移除;

(8)block1传输完毕,Client 再次向 NameNode 请求上传 block2的 DataNode 列表;

(9)Client完成数据写入后,调用 close()方法,关闭数据流。

传输过程中,有某个 DataNode 出现了故障,怎么办?

1.关闭当前的 pipeline;

2.block重新放回数据队列;

3.写入成功的DataNode做标识,失败的DataNode在重启之后将过时的block删除;

4.出现错误的DataNode从传输管道pipeline中移除,NameNode分配一个新的DataNode,保持副本数量,剩余的block继续在剩下的DataNode中进行传输;

5.多个DataNode同时出错,满足最小副本数写操作即可认为成功,为保证副本数量,block在集群中可以异步复制

以下是在学习时老师画的流程图,可结合文字理解

3.HDFS 读数据流程

(1)Client 向 NameNode 请求读取文件;

(2)NameNode返回文件的全部block列表和每个block对应的DataNode列表;

(3)Client就近原则选择一台DataNode请求读取数据;

(4)DataNode 开始发送数据,Client 以 packet 为单位接收,先在本地缓存,然后写入目标文件;

(5)读取完当前block,关闭当前的 DataNode 连接,开始寻找读取下一个block最佳的DataNode,后面的block相当于追加到前一个block块,最终合并成一个文件。

(6)读取完一个 block 都会进行 checksum 验证,若是读取DataNode出现错误,Client通知NameNode,从下一个拥有该block的DataNode中读取。

下章将逐一介绍NameNode、DataNode、SecondaryNameNode的工作机制。

赞(3) 打赏
未经允许不得转载:Mr. Almost的个人博客 » HDFS原理解析(一)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

谢谢老板~

支付宝扫一扫打赏

微信扫一扫打赏