Hadoop_day03_HDFS重点概念(架构、读写过程、机架感知、NameNode、DataNode、SecondaryNameNode)

21 篇文章 0 订阅
8 篇文章 0 订阅

一、HDFS的架构:

1:Client(客户端)

  • 文件切分。文件上传到HDFS的时候,Client将文件切分成一个个block,然后进行存储

  • 与NameNode进行交互,获取文件的位置信息

  • 与DataNode进行交互,读取或者写入数据

  • Client提供一些命令来管理和访问HDFS,比如启动或者关闭HDFS

2:NameNode(master,一个管理者)

  • 管理HDFS的名称空间

  • 管理数据块(block)映射信息

  • 配置副本策略

  • 处理客户端请求

3:DataNode(slave

  • 存储实际的数据块

  • 执行数据块的读写操作

4:SecondaryNameNode(并非NameNode的热备,当NameNode挂掉的时候,不能马上替换NameNode并提供服务)

  • 辅助NameNode,分担其工作量

  • 定期合并fsimage和edits,并推送给NameNode

  •  在紧急情况下,可辅助恢复NameNode

 

二、NameNode的作用

        NameNode在内存中保存着整个文件系统的名称空间和文件数据块的地址映射

        整个HDFS的可存储文件数受限于NameNode的内存大小

1:NameNode元数据信息

        文件名、文件目录结构、文件属性(生成时间、副本数、权限)、每个文件的块列表,以及列表中的块与块所在的DataNode之间的地址映射关系,在内存中加载文件系统中每个文件和每个数据块的引用关系(文件、block、DataNode之间的映射信息),数据会定期保存到本地磁盘(fsimage和edits文件)

2:NameNode文件操作

  • NameNode负责文件元数据的操作

  • DataNode负责处理文件内容的读写请求,数据流不经过NameNode,但会询问他跟哪个DataNode联系

3:NameNode副本

        文件数据块到底存放到哪个DataNode上,是由NameNode决定的,NameNode会根据全局情况作出放置副本的决定

4:NameNode心跳机制

        全权管理数据块的复制,周期性的接收心跳和块的状态报告信息(包含该DataNode上所有数据块的列表),若接收到心跳信息,NameNode认为DataNode工作正常,如果在10分钟后还接收不到DataNode的心跳,那么NameNode认为DataNode已经宕机,这时候NameNode准备要把DataNode上的数据块进行重新的复制。块的状态报告包含了一个DataNode上所有数据块的列表,blocks report 每隔1小时发送一次

 

三、DataNode的作用

        提供真实文件数据的存储服务

  • DataNode以数据块的形式存储HDFS文件

  • DataNode响应HDFS客户端的读写请求

  • DataNode周期性向NameNode汇报心跳信息

  • DataNode周期性向NameNode汇报数据块信息

  • DataNode周期性向NameNode汇报缓存数据块信息

 

四、HDFS的机架感知

  1. 第一个副本块存放本机

  2. 第二个副本块存放跟本机同机架内的其他服务器节点

  3. 第三个副本块存放不同机架的一个服务器节点上

 

五、HDFS文件写入过程

  1. Client发起文件上传请求,通过RPC(远程过程调用协议)与NameNode建立通讯

  2. NameNode收到请求后进行权限校验(是否有权限进行写入、检查目标文件是否存在)

  3. Client收到可以上传的信息后,继续请求第一个block应该存放在哪些DataNode上

  4. NameNode收到请求后根据DataNode上的block信息(确认DataNode上的剩余空间等)和机架感知机制,选出适合上传的3个主机(dn1,dn2,dn3),并将主机列表返回给Client

  5. Client首先与dn1建立连接(pipeline),dn1再与dn2建立pipeline,dn2与dn3建立pipeline

  6. 当pipeline建立成功后,Client向dn1传递数据,数据单位为package(64k),dn1在接受到数据后将package中的信息进行缓存,随后将package继续通过pipeline传递到dn2,dn2收到数据后进行缓存并将package传递给dn3,传递成功后返回一个应答(ack),应答通过pipeline传递回Client,这时Client知道传递成功。(package传递过程不断进行,直到将block全部传递完毕)

 

六、HDFS文件读取过程

  1. Client向NameNode发起文件下载请求(通过RPC)

  2. NameNode在收到请求后进行权限校验,并对需要下载文件的block进行查找,选出每一个block对应的主机列表(3个副本),比如blk1:dn1,dn3,dn4;blk2:dn2,dn3,dn4;blk3:dn1,dn2,dn4,经过选择(机架感知:首先选择本主机的,其次本机架的)得到了一个block列表:{blk1:dn1,blk2:dn2,blk3:dn1},返回给Client

  3. Client得到了block列表后分别于dn1,dn2,dn1建立pipeline,开始数据的读取(package:64k),并发过程

  4. 数据读取完毕后再将三个block进行合并,得到完整的下载文件

 

七、SecondaryNameNode的工作机制

        SecondaryNameNode定期将fsimage和edits合并为一个新的fsimage,覆盖原有的fsimage,并用新的edits替换原有的edits(在合并过程中,NameNode使用新的edits进行操作的记录,不再使用原有的edits)

特点:

  • 完成合并的是SecondaryNameNode, 会请求NameNode停止使用edits, 暂时将新写操作放入一个新的文件中edits.new

  • SecondaryNameNode从NameNode中通过Http GET获得edits, 因为要和fsimage合并, 所以也是通过Http Get的方式把fsimage加载到内存, 然后逐一执行具体对文件系统的操作, 与fsimage合并, 生成新的fsimage, 然后通过Http POST的方式把fsimage发送给NameNode。NameNode从SecondaryNameNode获得了fsimage后会把原有的fsimage替换为新的fsimage, 把edits.new变成edits.同时会更新fstime

  • Hadoop进入安全模式时需要管理员使用dfsadmin的save namespace来创建新的检查点

  • SecondaryNameNode在合并edits和fsimage时需要消耗的内存和NameNode差不多, 所以一般把NameNode和 SecondaryNameNode放在不同的机器上

     

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值