HDFS组织架构
HDFS(Hadoop Distributed File System)是Hadoop生态系统中一个高可靠性、高吞吐量、高容错性的分布式文件系统。它最初是Google发明的GFS(Google File System)的实现, 根据Apache Hadoop Project组织架构,HDFS的组织架构如下:
- ClientClient是与用户交互的第一层,它处理和提供文件系统或者存储集群的IO请求。Client可以是运行在Hadoop框架上面的应用程序,比如MapReduce作业,也可以使用命令行来操作HDFS文件系统。
- NameNodeNameNode是HDFS的主节点,是整个分布式文件系统的管理核心。它存储了关于每一个文件和目录的元数据信息,包括文件名、文件属性、文件块的位置信息等。此外,NameNode还负责处理客户端读写请求,并将数据块分配给相应的DataNode。
- Secondary NameNodeSecondary NameNode不是NameNode的替代品,它是在备份NameNode的文件系统状态信息方面起着帮助NameNode的作用。它定期从NameNode获取最新的文件元数据信息并将其合并到fsimage(文件系统镜像)中,同时再结合edits(编辑日志)来生成新的fsimage,在某些情况下可以减轻NameNode压力。
- DataNodeDataNode是存储HDFS中实际数据块的节点。它们负责接收客户端读写请求来读取或者写入数据,并向其他DataNode传输数据块进行备份和复制,以保证数据副本数量在分布式集群中的存储以及高可用性。
NameNode
NameNode 在启动的时候会做哪些操作
在Hadoop集群中,NameNode是一个重要的组件,它负责管理文件系统命名空间和访问控制等操作。当启动NameNode时,它会执行以下操作:
- 读取配置文件:NameNode需要读取相关的配置文件,例如core-site.xml、hdfs-site.xml等,以获取必要参数。
- 校验文件系统元数据:NameNode会检查文件系统元数据,包括命名空间、权限和块信息等是否存在损坏。如果文件系统损坏,则会尝试从备份恢复。
- 连接到ZooKeeper:如果ZooKeeper作为HA环境下的主节点,那么NameNode会连接到ZooKeeper,否则它将自己指定为主节点。
- 启动RPC服务:NameNode作为HDFS的核心组件之一,它需要提供RPC服务用于远程客户端操作文件系统。因此,在启动时,NameNode会启动RPC服务,并绑定到默认端口9000。
- 初始化内存数据结构:NameNode会初始化内存数据结构来存储文件系统的映像,包括命名空间树、所有数据块的ID列表和块到Datanode的映射等。
- 注册Datanode:在NameNode启动后,Datanode需要向它注册以便被识别。NameNode会监听其管理端口50010,接收来自Datanode的注册请求。
- 初始化SafeMode:如果在上一次停机时文件系统处于SafeMode模式下,那么在启动NameNode时它会重现该状态。此时,进入安全模式的原因和状态信息会被记录在命名空间映像中。
- 启动后台线程:NameNode还需要启动许多后台线程,用于监控数据节点的健康状况、处理客户端请求以及清理
Namenode在首次启动时的工作流程
- 格式化文件系统:为了启动Hadoop文件系统,我们需要首先进行格式化以生成文件系统元数据。这一步会创建默认配置和目录结构并生成一个名为 fsimage 的映像文件。
- 启动NameNode:一旦文件系统格式被初始化,就可以启动NameNode进程。NameNode会从fsimage文件中加载文件系统元数据到内存中,同时它需要等待DataNode注册并发送块报告。
- 启动DataNode:一旦DataNode节点开始运行,它会向NameNode注册,并将块报告与NameNode交互。之后,NameNode将比较fsimage中记录的块数是否与block report中的总块数相同。
- 对文件系统进行操作:最后,对文件系统进行操作,例如创建新目录、上传文件、删除文件等更改文件系统状态的操作。每次文件系统上发生更改,都需要将其更新到内存中的元数据信息中,并在edits日志文件中记录更改的信息以实现持久性,以保证元数据信息的可靠性。因此,以上所述工作流程说明namenode在启动时做的事情。
Namenode非首次启动时的工作流程
在非首次启动时,Namenode的工作流程与首次启动时类似。然而,由于此时已经存在edits日志和fsimage文件,因此有些步骤会有所不同,并且Namenode需要执行一些额外的操作来恢复前一次运行期间未完成处理的编辑日志。
- 启动NameNode:- Namdenode读取fsimage文件并将其加载到内存中。- 然后Namenode读取上次运行期间未完成的编辑日志(即edits文件)并将其合并到内存中的元数据树。
- 等待DataNode的注册:一旦Namenode完成第1步,则等待DataNode节点注册并发送块报告流程开始。
- 版本和命名空间检查:接下来,Namenode会进行版本和命名空间检查以确保文件系统的有效性和完整性。
- 运行BlockReport:一旦版本检查成功,Namendoe将运行BlockReport过程,该过程涉及向所有DataNode节点请求它们管理的block列表,并标记可能失效的block。
- 对文件系统进行操作:最后,可以对文件系统进行任何更改。每次发生更改时,随着内存中元数据信息的更新,Namenode会记录更改的信息到edits日志文件中,以实现持久性并保证元数据信息的可靠性。
总之,当Namenode在非首次启动时,它会从fsimage文件中恢复文件系统状态,然后将编辑日志与其合并。此后,进行命名空间和版本检查,接着进行块报告处理,并等待对文件系统做出更改。
Secondary NameNode
Secondary NameNode是什么
Secondary NameNode是Apache Hadoop分布式计算框架中的一个组件,它的主要作用是协助NameNode元数据操作。
在Hadoop集群中,NameNode是至关重要的组件,它负责管理整个分布式文件系统(HDFS)的命名空间和访问控制。但是,由于NameNode必须承担大量任务,例如客户端读写请求、数据块定位以及心跳检查等,这将导致其负载剧增并影响其性能。
为了解决这个问题,Hadoop引入了Secondary NameNode,在内存中定期备份和合并NameNode的元数据,并将其写入本地磁盘中,而不会对NameNode的进程进行任何干扰或负担。
如果发生NameNode某些故障,Secondary NameNode可以与本地磁盘中存储的元数据一起,帮助恢复NameNode。虽然它不能完全代替NameNode,但是它提供了一种低成本高效的方式来实现NameNode元数据的冗余和快速恢复,从而提高整个集群的可靠性和稳定性。
Secondary NameNode工作机制
Secondary NameNode是HDFS(Hadoop分布式文件系统)中的一个组件,主要负责帮助NameNode完成某些管理操作,以提高HDFS的可靠性和效率。
工作机制
- Secondary NameNode会定期从NameNode获取checkpoint数据。Checkpoint是NameNode关于文件系统状态的一个快照,包括了所有块的元数据信息,例如块大小、位置等。这些信息存放在
fsimage
和edits
两个文件中。 fsimage文件包含了当前文件系统的元数据信息,而edits文件则包含了自上一个checkpoint之后的命名空间操作(例如:创建文件、删除文件等)。 - Secondary NameNode将这些文件合并成一个新的fsimage文件,并将edits日志清空。这个新的fsimage文件被称为“checkpoint”。
- Secondary NameNode通过HTTP将新生成的checkpoint发送给NameNode。
- 当NameNode接收到这个checkpoint时,它会加载这个新的fsimage文件,然后对其中的edits日志进行重放,以恢复从上次checkpoint以来所有的修改。这样,NameNode的内部数据结构就能够与Secondary NameNode保持同步。
通过这种机制,Secondary NameNode维护了一个较小的fsimage和edits日志来加速HDFS集群的恢复速度和故障恢复能力,在NameNode崩溃时提供备份数据,同时减少NameNode服务器的压力,在大规模HDFS集群中发挥着重要作用。
Secondary NameNode 不能恢复 NameNode 的全部数据,那如何保证NameNode 数据存储安全
NameNode 数据存储的安全主要依赖于两个方面:备份和故障转移。
一方面,在 Hadoop 集群中,通常会设置多个 NameNode 实例以提高数据存储的可靠性和可用性。这些不同的 NameNode 可能是通过“活动”和“备用”角色轮番交替来发挥作用。在适当配置了 ZooKeeper 或者其他类似的工具时,如果某一个 NameNode 发生故障或宕机,则可以自动地将所有的读写请求转移到另一个健康的 NameNode 上,从而保证整个集群的正常运行。同时,对于数据存储本身也可以进行备份操作。例如,通过使用 HDFS 的快照(Snapshot)功能,可以及时地创建和管理文件系统状态的备份。这些备份可以存储在不同的位置或者不同的媒介上,以实现更加稳定的数据存储。
另一方面,HDFS 还支持异地备份,通过在远程地带备份数据,即使本地数据丢失,也可以恢复数据。如果有公有云或私有云的存储服务商合作,你也可以把HDFS的数据异地备份到公有云或私有云的对象存储上,保证本地故障的数据恢复速度更加迅速和更长远地存储的安全性。
版权归原作者 daladalabao 所有, 如有侵权,请联系我们删除。