Hadoop之HDFS(三)重要概念及原理

Hadoop之HDFS(三)重要概念及原理

NameNode的数据保存位置

元数据需要存放在内存中

NameNode的持久化

​ NameNode数据存在内存中,一旦断电,元数据丢失,整个集群就无法工作了。因此产生在磁盘中备份元数据的FsImage。这样又会带来新的问题,当在内存中的元数据更新时,如果同时更新FsImage,就会导致效率过低,但如果不更新,就会发生一致性问题,一旦NameNode节点断电,就会产生数据丢失。因此,引入Edits文件(只进行追加操作,效率很高)。每当元数据有更新或者添加元数据时,修改内存中的元数据并追加到Edits中。这样,一旦NameNode节点断电,可以通过FsImage和Edits的合并,合成元数据。但是,如果一旦长时间添加数据到Edits中,会导致该文件数据过大,效率降低,而且一旦断电,恢复元数据需要的时间过长。因此,需要定期进行FsImage和Edits的合并,如果这个操作由NameNode节点完成,又会效率过低。因此,引入一个新的节点SecondaryNamenode,专门用于FsImage和Edits的合并。

SencodaryNameNode

  1. 现存的NameNode面临的问题

问题

① 单点故障数据丢失?

② 日志持久化,容量大,回复慢

③ 快照持久化,短期内数据丢失问题依然存在。

④ 快照从哪儿来,合并的操作由谁做?

在这里插入图片描述

现有的持久化机制的特点

持久化机制 Redis(类比) Hadoop-NameNode 优点 缺点
日志增量 AOF EditsLog 数据**安全性高** 冗余度高、数据恢复慢
快照 RDB FSImage 数据**恢复快**、占用空间小 只保留数据的最终状态,快照间隔期见,数据可能丢失,安全性低
  1. NameNode持久化原理

简介

​ ① NameNode持久化的时候使用的是EditsLog文件,保障数据安全。

​ ② SencodaryNameNode负责定期将EditsLog中的数据,合并成FSImage的数据状态。(NameNode的助理,负责持久化文件的合并checkpoint)

​ ③ NameNode恢复持久化到内存时,从FSImage恢复,外加从最近合并后产生EdisLog恢复,保障数据加载速度快。

SecondaryNameNode工作(面试)

CheckPoint原理过程

checkpoint:editslog和FSImage的合并过程

1. SecondaryNameNodeNameNode发起合并请求
2. NameNode将当前的Editslog文件保存改名edits,并新建EditsLog继续持久化工作。
3. 将改名后的edits文件和本地的FSImage()发送给sencondaryNameNode
4. SecondaryNameNode负责将FSImage()+edits文件合并成FSImage()
5. 将新的FSImage()发送给NameNode保存。

在这里插入图片描述

Checkpoint时机

1. 每隔1小时触发一次checkPoint
2. 每100w次操作,触发一次checkpoint
	每1分钟检查一次,操作次数

设置时机:hdfs-site.xml

name value默认 含义
dfs.namenode.checkpoint.period 3600 3600秒触发一次
dfs.namenode.checkpoint.txns 1000000 100w次操作触发一次
dfs.namenode.checkpoint.check.period 60 1分钟检查一次操作次数

secondary定制(了解)

  1. 默认secondary在namenode所在的机器

  2. 位置查看 hdfs-site.xml

dfs.namenode.secondary.http-address=0.0.0.0:50090

dfs.namenode.secondary.https-address=0.0.0.0:50091

  1. 单独启动secondaryNameNode命令

hadoop-deamon start secondarynamenode

  1. 指定192.168.199.100为secondarynamenode的机器
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>192.168.199.100:50090</value>
</property>
<property>
<name>dfs.namenode.secondary.https-address</name>
<value>192.168.199.100:50091</value>
</property>

DataNode工作机制

序号 步骤 事情
0 启动 NameNode启动时,会启动slaves中所有的datanode
1 注册 DataNode向NameNode注册信息:block数据状态、元数据、校验和、心跳。告诉NameNode自己工作正常,数据完整。
2 周期上报 每隔1小时,会上报所有的block的元数据,校验和。
3 心跳 每3秒向namenode发送一次心跳,namenode返回心跳结果并包含一些数据操作的命令,如果发现datanode10分钟内没有心跳,则认为该datanode节点不可用

总结

核心服务

  1. Namenode
① 作为HDFS分布式文件系统的master主机,统领所有datanode;
② 接收client的访问:hdfs协议和http协议;
③ 保存了元数据:文件名 路径 大小 所有者 所属组 权限 修改时间 副本数 块与datanode映射关系(通过这个才能到对应datanode获得真正的数据);
④ 数据保存在内存中。
⑤ 保存元数据的持久化信息:FsImage和editslog数据。
  1. DateNode
① 存储真正的数据的Block 单个最大128M
② block的元数据、checksum和编号。
③ 心跳,向NameNode汇报当前节点的健康状态。(没心跳,则标记宕机)
④ 周期汇报datanode的所有block的校验和等数据,确保数据的正确性。
  1. Client
① 可以是命令行可以使java程序。
② client访问namenode确定数据相关信息以及是否存在(如果存在就返回已经存在)。
③ client真正操作数据会与所有的datanode直接通信。
	上传,会与最近的datanode通信。
	下载,会与所有存储了block的datanode通信。
  1. SecondaryNameNode
NameNode持久化助理,代替NameNode完成FSImageEditslog的合并过程。(checkpoint)

关键数据

  1. FSImage
① 完整的集群下的所有block数据的元数据。
  1. Editslog
① 保存了每一次HDFS的文件操作的日志信息。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44191814/article/details/120563151