HDFS的组成原理

目录

FsImage和Edits是什么

FsImage和Edits有什么用

NN,2NN,DN,FsImage和Edits原理

NameNode,Secondary NameNOde与FsImage和Edits的关系

NameNode和Secondary Namenode工作机制

1)第一阶段:NameNode启动

2)第二阶段:Secondary NameNode工作

DataNode工作机制

DataNode节点保证数据的完整性方法

DataNode掉线时限(可设置)

都怎么用

 CheckPoint时间设置(SNN执行频率设置)

DN向NN汇报当前解读信息的时间间隔设置

DN扫描自己节点块信息列表的时间设置

掉线时限参数设置

FsImage和Edits是什么

FsImage FsImage是HDFS的持久化镜像文件,它记录了整个文件系统的元数据状态。FsImage可以看作是关于文件、目录、权限以及块位置等信息的一个快照。它存储在NameNode节点的本地文件系统中,并在HDFS启动时被加载到内存中,用于恢复文件系统的最新状态。

EditsEdits文件是HDFS的持久化事务日志文件,它记录了对文件系统的每个修改操作。每当发生细微的文件系统更改(如创建文件、删除文件、更改文件权限等),相关的修改操作就会被追加到Edits文件中,确保每个操作都可以持久化保存。

FsImage和Edits有什么用

FsImage用于快速恢复整个文件系统的状态。在启动HDFS时,NameNode会读取FsImage文件并将其中的元数据加载到内存中。这样,NameNode就能够快速提供文件系统的元数据查询和访问

FsImage用于创建和恢复HDFS的备份NameNode。当主NameNode发生故障时,备份NameNode可以使用FsImage文件来恢复原始文件系统的状态,从而确保高可用性和数据的持久性。

Edits文件用于恢复文件系统的最新修改。在启动HDFS时,NameNode会逐个读取Edits文件中的操作日志,并将这些操作应用到内存中的元数据上,以达到恢复最新状态的目的。

Edits文件还用于实现故障恢复和高可用性。通过将Edits文件复制到其他NameNode节点或备份节点,可以确保在主节点故障时能够从Edits文件中恢复文件系统的状态,从而实现高可用性和数据的持久性。

综上,FsImage是HDFS文件系统的元数据快照,用于恢复整个文件系统的状态,而Edits文件是持久化的文件系统修改操作日志,用于记录和恢复文件系统的最新修改。两者结合起来,确保了HDFS的高可用性、数据的持久性和一致性。

NN,2NN,DN,FsImage和Edits原理

NameNode,Secondary NameNOde与FsImage和Edits的关系

        首先,我们做个假设,如果元数据存储在NameNode节点的磁盘中,因为经常需要进行随机访问,还有响应客户请求,必然是效率过低。因此,元数据需要存放在内存中。但如果只存在内存中,一旦断电,元数据丢失,整个集群就无法工作了。因此产生在磁盘中备份元数据的FsImage

        这样又会带来新的问题,当在内存中的元数据更新时,如果同时更新FsImage,就会导致效率过低,但如果不更新,就会发生一致性问题,一旦NameNode节点断电,就会产生数据丢失。因此,引入Edits文件(只进行追加操作,效率很高)。每当元数据有更新或者添加元数据时,修改内存中的元数据并追加到Edits中。这样,一旦NameNode节点断电,可以通过FsImage和Edits的合并,合成元数据。

        但是,如果长时间添加数据到Edits中,会导致该文件数据过大,效率降低,而且一旦断电,恢复元数据需要的时间过长。因此,需要定期进行FsImage和Edits的合并,如果这个操作由NameNode节点完成,又会效率过低。因此,引入一个新的节点Secondary Namenode,专门用于FsImage和Edits的合并。

NameNode和Secondary Namenode工作机制

1)第一阶段:NameNode启动

(1)第一次启动NameNode格式化后,创建Fsimage和Edits文件。如果不是第一次启动,将从持久化存储中加载最近的一份FsImage镜像文件,选择Edits日志进行合并到内存

(2)客户端对元数据进行增删改的请求。

(3)NameNode记录操作日志,更新滚动日志。

(4)NameNode在内存中对元数据进行增删改。

2)第二阶段:Secondary NameNode工作

(1)Secondary NameNode询问NameNode是否需要CheckPoint(将主NameNode当前的内存状态保存到持久性存储介质上。可设置)。直接带回NameNode是否检查结果。

(2)Secondary NameNode请求执行CheckPoint。

(3)NameNode滚动正在写的Edits日志。

(4)将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode。

(5)Secondary NameNode加载编辑日志和镜像文件到内存,并合并。

(6)生成新的镜像文件fsimage.chkpoint。

(7)拷贝fsimage.chkpoint到NameNode。

(8)NameNode将fsimage.chkpoint重新命名成fsimage。

DataNode工作机制

(1)一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,数据本身+元数据(数据块的长度,块数据的校验和,以及时间戳)。

(2)DataNode启动后向NameNode注册,通过后,周期性(默认6小时,可设置)的向NameNode上报所有的块信息。

(3)心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。

(4)集群运行中可以安全加入和退出一些机器。

DataNode节点保证数据的完整性方法

1、数据校验和:DataNode在存储数据块时会计算一个校验和(checksum)值,并将其存储在元数据中。在检索数据块时,客户端会向DataNode请求数据块的校验和值,然后将其与本地计算出的值进行比较。如果两个值不相等,则说明数据块已经被损坏或修改,客户端需要重新获取数据块。

2、数据复制:Hadoop默认会将数据块在集群中多个节点上进行复制,以提高数据的可靠性和可用性。如果DataNode节点上的某个副本被损坏或不可用,HDFS可以使用其他副本来恢复数据块。

3、块扫描(可设置):DataNode定期会扫描本地存储的数据块,以检测是否有坏块。如果发现坏块,则会通过复制块来恢复数据的完整性。

4、快速数据验证:DataNode还支持快速数据验证(fast data verification)功能,它在读取数据块时会快速验证数据块的完整性。这种方式可以提高数据完整性检验的效率。

5、数据签名:DataNode还支持数据签名(data signing)功能,可以在存储和检索数据块时验证数据块的完整性和身份。这种方式可以保护数据块不被恶意篡改或替换。

DataNode掉线时限(可设置)

        可以帮助提高系统的可用性和故障恢复能力,设置DataNode掉线时限需要权衡可靠性和误报率。如果将时限设置得太短,可能会导致误报,即将正常节点错误地标记为掉线状态。而将时限设置得太长,则可能延迟故障检测和恢复过程。因此,在设置DataNode掉线时限时,需要根据具体的系统需求和环境条件进行调整,以达到最佳的效果。

具体作用如下:

  • 故障检测:设置DataNode掉线时限可以用来检测DataNode节点是否处于正常状态。如果一个DataNode在规定的时间内没有发送心跳信号或与它通信的连接断开,系统可以将其标记为掉线状态。
  • 快速故障恢复:通过设置DataNode掉线时限,系统可以快速检测到故障节点,并触发相应的恢复机制。当一个DataNode被标记为掉线状态后,系统可以立即开始从其他可用的DataNode复制该节点上的数据块,以保持数据的冗余备份。
  • 自动数据迁移:设置DataNode掉线时限还可以触发数据的自动迁移。当一个DataNode掉线后,系统可以根据策略将该节点上的数据块迁移到其他正常运行的DataNode节点上,以保持数据的平衡分布。这有助于避免数据倾斜和节点负载不均的问题。
  • 高可用性:通过设置DataNode掉线时限,系统可以及时检测到故障节点并采取相应的措施,从而提高系统的可用性。通过快速故障检测和数据恢复,可以减少数据不可用的时间,并保证系统在节点故障时仍能正常工作。

都怎么用

        底层逻辑与运用是打包好的,我们使用时,一般不会接触到,由系统自动调用,我们只需要修改一些相关参数就行

 CheckPoint时间设置(SNN执行频率设置)

通常情况下,Secondary NameNode每隔一小时执行一次。

一分钟检查一次操作次数,当操作次数达到1百万时,Secondary NameNode执行一次。

设置在hdfs-default.xml中进行

<property>

//3600秒执行一次,即一小时执行一次2NN

  <name>dfs.namenode.checkpoint.period</name>

  <value>3600s</value>

</property>

<property>

//配置操作次数达到多少次时,执行一次2NN

  <name>dfs.namenode.checkpoint.txns</name>

  <value>1000000</value>

<description>操作动作次数</description>

</property>

<property>

//安装时间,设置操作次数频率

  <name>dfs.namenode.checkpoint.check.period</name>

  <value>60s</value>

<description> 1分钟检查一次操作次数</description>

</property>

DN向NN汇报当前解读信息的时间间隔设置

hdfs-default.xml

<property>

//单位为毫秒

<name>dfs.blockreport.intervalMsec</name>

<value>21600000</value>

<description>Determines block reporting interval in milliseconds.</description>

</property>

DN扫描自己节点块信息列表的时间设置

hdfs-default.xml

<property>

<name>dfs.datanode.directoryscan.interval</name>

<value>21600s</value>

 <description>Interval in seconds for Datanode to scan data directories and reconcile the difference between blocks in memory and on the disk.

Support multiple time unit suffix(case insensitive), as described

in dfs.heartbeat.interval.

</description>

</property>

掉线时限参数设置

hdfs-default.xml

<property>

//单位毫秒,默认为5分钟

    <name>dfs.namenode.heartbeat.recheck-interval</name>

    <value>300000</value>

</property>

<property>

 //单位秒,默认也为3秒

    <name>dfs.heartbeat.interval</name>

    <value>3</value>

</property>

//超时时长默认为10分30秒

超时时长计算公式:

TimeOut = 2  dfs.namenode.heartbeat.recheck-interval + 10  * dfs.heartbeat.interval

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值