HDFS架构

HDFS架构

HDFS的全称为 Hadoop Distributed File System,是解决分布式存储的分布式文件系统

HDFS采用 Master/Slave 架构存储数据,且支持NameNode的HA

HDFS的优缺点

优点:

(1)高容错性

(2)适合大数据处理

(3)流式数据访问

(4)可构建在廉价的机器

缺点:

(1)不适合低延时数据访问场景

(2)不适合小文件存取场景

(3)不适合并发写入,文件随机修改场

HDFS架构主要包含客户端(Client),NameNode(NN),DataNode(DN) 和SecondaryNameNode(SNN)四个重要组成部分。

NameNode:
管理文件系统的Namespace元数据
一个HDFS集群只有一个Active的NN

DataNode:
数据存储节点,保存和检索Block
一个集群可以有多个数据节点

SecondaryNameNode:
合并NameNode的edit.log到fsimage文件中
辅助NN将内存中元数据信息持久化

HDFS的主要流程

在这里插入(图片侵权可删)

(1)客户端向NameNode发起请求,获取元数据信息,这些元数据信息包括命名空间、块映射信息及 DataNode 的位置信息等。

(2)NameNode 将元数据信息返回给客户端

(3)客户端获取到元数据信息后,到相应的 DataNode 上读/写数据

(4)相关联的 DataNode 之间会相互复制数据,以达到 DataNode 副本数的要求

(5)DataNode 会定期向 NameNode 发送心跳信息,将自身节点的状态信息报告给 NameNode

(6)SecondaryNameNode 并不是 NameNode 的备份,SecondaryNameNode 会定期获取NameNode 上的 fsimage和 edits log 日志,并将二者进行合并,产生 fsimage.ckpt推送给 NameNode

NameNode 【元数据节点】

NameNode 是整个 Hadooop 集群中至关重要的组件,它维护着整个 HDFS 树,以及文件系统树中所有的文件和文件路径的元数据信息,这些元数据信息包括文件名,命令空间,文件属性(文件生成的时间、文件的副本数、文件的权限)、文件数据块、文件数据块与所在 DataNode 之间的映射关系等。

NameNode的主要功能

在这里插入图片描述(图片侵权可删)

一旦 NameNode 宕机或 NameNode 上的元数据信息损坏或丢失,基本上就会丢失 Hadoop 集群中存储的所有数据,整个 Hadoop 集群也会随之瘫痪。

DataNode 【数据节点】

DataNode 是真正存储数据的节点,这些数据以数据块的形式存储在 DataNode 上。

一个数据块包含两个文件:

一个是存储数据本身的文件,

一个是存储元数据的文件(这些元数据主要包括数据块的长度、数据块的检验和时间戳)

DataNode运行的工作机制

在这里插入图片描述(图片侵权可删)

(1)DataNode启动之后,向 NameNode 注册。

(2)NameNode 返回注册成功的消息给 DataNode。

(3)DataNode 收到 NameNode 返回的注册成功的信息之后,会周期性地向 NameNode 上报当前 DataNode 的所有块信息。
DataNode 向 NameNode 发送所有数据块的默认时间周期是 1h。

(4)DataNode 周期性地向NameNode 发送心跳信息,NameNode 收到 DataNode 发来的心跳信息后,会将DataNode 需要执行的命令放入到心跳信息的返回数据中,返回给 DataNode。
DataNode 向 NameNode 发送心跳信息的默认时间周期是 3s。

(5)NameNode 超过一定的时间没有收到 DataNode 发来的心跳信息,则 NameNode 会认为对应的 DataNode 不可用。
默认的超时时间是10min。

(6)在存储上相互关联的 DataNode 会同步数据块,以达到数据副本数的要求。

SecondaryNameNode 【Hadoop的检查点(checkpoint)】

SecondaryNmaeNode并不是NameNode的备份,在NameNode发生故障时也不能立刻接管NameNode的工作

SecondaryNameNode在Hadoop运行的过程中具有两个作用:

一个是备份数据镜像

另一个是定期合并日志和镜像

SecondaryNameNode 定期合并 NameNode 中的 fsimage 和 edits log,能够防止 NameNode 重启时把整个 fsimage 镜像文件加载到内存,耗费过长的启动时间。

SecondaryNameNode的主要工作流程:

在这里插入图片描述(图片侵权可删)

(1)SecondaryNameNode 会通知 NameNode 生成新的edits.log 日志文件。

(2)NameNode 生成新的 edits.log 日志文件,然后将新的日志信息写到新生成的 edits.log 日志文件中。

(3)SecondaryNameNode 复制 NameNode 上的 fsimage 镜像和 edits.log 日志文件,此时使用的是 http get 方式。

(4)SecondaryNameNode 将fsimage将镜像文件加载到内存中,然后执行 edits.log 日志文件中的操作,生成新的镜像文件 fsimage.ckpt。

(5)SecondaryNameNode 将 fsimage.ckpt 文件发送给 NameNode,此时使用的是 http post 方式。

(6)NameNode 将 edits.log 日志文件替换成新生成的 edits.log 日志文件,同样将 fsimage文件替换成 SecondaryNameNode 发送过来的新的 fsimage 文件。

(7)NameNode 更新 fsimage 文件,将此次执行 checkpoint 的时间写入 fstime 文件中。

补充: hadoop 中 fsimage 文件和 edits.log 文件的作用

它们共同构成了Hadoop分布式文件系统(HDFS)的元数据存储机制,共同用于持久化存储Hadoop分布式文件系统(HDFS)的命名空间信息和文件系统操作日志。

Hadoop 分布式文件系统(HDFS)旨在可靠地存储非常大的数据集,并以高带宽将这些数据集流式传输给用户应用程序。为了实现这一目标,HDFS需要一种机制来管理文件系统的结构和内容,这正是 fsimage 文件和 edits.log 文件所承担的任务。

fsimage 文件实际上是一个快照,它展示了文件系统在某一时间点的状态,这个快照包括了所有数据块的位置、文件的属性以及目录树的结构等信息。

当 HDFS 启动或某个数据节点失败需要重启时,fsimage 文件提供了恢复文件系统状态所需的信息。

fsimage 文件对于确保数据的可靠性和系统的可用性至关重要。

edits.log 文件则记录了对文件系统状态所做的所有修改操作。

每当有文件被创建、删除或修改时,相应的修改都会写入 edits.log 文件,这些修改操作随后会应用到 fsimage 文件上,以更新文件系统的快照状态。

edits.log 文件使得HDFS能够高效地处理大量的数据操作,同时保持对文件系统状态的实时反映。

这两个文件共同作用于Hadoop分布式文件系统的持久化。当HDFS启动时,它会使用 fsimage 文件来恢复文件系统的初始状态,然后通过回放 edits.log 文件中的操作日志来将文件系统恢复到最新状态。这样,即使系统崩溃或者需要重新启动,也能够确保文件系统的数据不会丢失,从而保证了系统的可靠性和稳定性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值