HDFS组织架构及相关介绍

news/2024/5/20 3:39:49 标签: hdfs, hadoop, 架构

HDFS组织架构

HDFS(Hadoop Distributed File System)是Hadoop生态系统中一个高可靠性、高吞吐量、高容错性的分布式文件系统。它最初是Google发明的GFS(Google File System)的实现, 根据Apache Hadoop Project组织架构,HDFS的组织架构如下:

  1. Client

    Client是与用户交互的第一层,它处理和提供文件系统或者存储集群的IO请求。Client可以是运行在Hadoop框架上面的应用程序,比如MapReduce作业,也可以使用命令行来操作HDFS文件系统。

  2. NameNode

    NameNode是HDFS的主节点,是整个分布式文件系统的管理核心。它存储了关于每一个文件和目录的元数据信息,包括文件名、文件属性、文件块的位置信息等。此外,NameNode还负责处理客户端读写请求,并将数据块分配给相应的DataNode。

  3. Secondary NameNode

    Secondary NameNode不是NameNode的替代品,它是在备份NameNode的文件系统状态信息方面起着帮助NameNode的作用。它定期从NameNode获取最新的文件元数据信息并将其合并到fsimage(文件系统镜像)中,同时再结合edits(编辑日志)来生成新的fsimage,在某些情况下可以减轻NameNode压力。

  4. DataNode

    DataNode是存储HDFS中实际数据块的节点。它们负责接收客户端读写请求来读取或者写入数据,并向其他DataNode传输数据块进行备份和复制,以保证数据副本数量在分布式集群中的存储以及高可用性。

NameNode

NameNode 在启动的时候会做哪些操作

在Hadoop集群中,NameNode是一个重要的组件,它负责管理文件系统命名空间和访问控制等操作。当启动NameNode时,它会执行以下操作:

  1. 读取配置文件:NameNode需要读取相关的配置文件,例如core-site.xml、hdfs-site.xml等,以获取必要参数。

  2. 校验文件系统元数据:NameNode会检查文件系统元数据,包括命名空间、权限和块信息等是否存在损坏。如果文件系统损坏,则会尝试从备份恢复。

  3. 连接到ZooKeeper:如果ZooKeeper作为HA环境下的主节点,那么NameNode会连接到ZooKeeper,否则它将自己指定为主节点。

  4. 启动RPC服务:NameNode作为HDFS的核心组件之一,它需要提供RPC服务用于远程客户端操作文件系统。因此,在启动时,NameNode会启动RPC服务,并绑定到默认端口9000。

  5. 初始化内存数据结构:NameNode会初始化内存数据结构来存储文件系统的映像,包括命名空间树、所有数据块的ID列表和块到Datanode的映射等。

  6. 注册Datanode:在NameNode启动后,Datanode需要向它注册以便被识别。NameNode会监听其管理端口50010,接收来自Datanode的注册请求。

  7. 初始化SafeMode:如果在上一次停机时文件系统处于SafeMode模式下,那么在启动NameNode时它会重现该状态。此时,进入安全模式的原因和状态信息会被记录在命名空间映像中。

  8. 启动后台线程:NameNode还需要启动许多后台线程,用于监控数据节点的健康状况、处理客户端请求以及清理

Namenode在首次启动时的工作流程

  1. 格式化文件系统:为了启动Hadoop文件系统,我们需要首先进行格式化以生成文件系统元数据。这一步会创建默认配置和目录结构并生成一个名为 fsimage 的映像文件。

  2. 启动NameNode:一旦文件系统格式被初始化,就可以启动NameNode进程。NameNode会从fsimage文件中加载文件系统元数据到内存中,同时它需要等待DataNode注册并发送块报告。

  3. 启动DataNode:一旦DataNode节点开始运行,它会向NameNode注册,并将块报告与NameNode交互。之后,NameNode将比较fsimage中记录的块数是否与block report中的总块数相同。

  4. 对文件系统进行操作:最后,对文件系统进行操作,例如创建新目录、上传文件、删除文件等更改文件系统状态的操作。每次文件系统上发生更改,都需要将其更新到内存中的元数据信息中,并在edits日志文件中记录更改的信息以实现持久性,以保证元数据信息的可靠性。因此,以上所述工作流程说明namenode在启动时做的事情。

Namenode非首次启动时的工作流程

在非首次启动时,Namenode的工作流程与首次启动时类似。然而,由于此时已经存在edits日志和fsimage文件,因此有些步骤会有所不同,并且Namenode需要执行一些额外的操作来恢复前一次运行期间未完成处理的编辑日志。

  1. 启动NameNode:

    • Namdenode读取fsimage文件并将其加载到内存中。
    • 然后Namenode读取上次运行期间未完成的编辑日志(即edits文件)并将其合并到内存中的元数据树。
  2. 等待DataNode的注册:一旦Namenode完成第1步,则等待DataNode节点注册并发送块报告流程开始。

  3. 版本和命名空间检查:接下来,Namenode会进行版本和命名空间检查以确保文件系统的有效性和完整性。

  4. 运行BlockReport:一旦版本检查成功,Namendoe将运行BlockReport过程,该过程涉及向所有DataNode节点请求它们管理的block列表,并标记可能失效的block。

  5. 对文件系统进行操作:最后,可以对文件系统进行任何更改。每次发生更改时,随着内存中元数据信息的更新,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的可靠性和效率。

工作机制

  1. Secondary NameNode会定期从NameNode获取checkpoint数据。Checkpoint是NameNode关于文件系统状态的一个快照,包括了所有块的元数据信息,例如块大小、位置等。这些信息存放在fsimageedits两个文件中。 fsimage文件包含了当前文件系统的元数据信息,而edits文件则包含了自上一个checkpoint之后的命名空间操作(例如:创建文件、删除文件等)。

  2. Secondary NameNode将这些文件合并成一个新的fsimage文件,并将edits日志清空。这个新的fsimage文件被称为“checkpoint”。

  3. Secondary NameNode通过HTTP将新生成的checkpoint发送给NameNode。

  4. 当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的数据异地备份到公有云或私有云的对象存储上,保证本地故障的数据恢复速度更加迅速和更长远地存储的安全性。


http://www.niftyadmin.cn/n/467620.html

相关文章

Swagger与knife4j接口文档组件详解

swagger介绍 相信无论是前端还是后端开发,都或多或少地被接口文档折磨过。前端经常抱怨后端给的接口文档与实际情况不一致。后端又觉得编写及维护接口文档会耗费不少精力,经常来不及更新。其实无论是前端调用后端,还是后端调用后端&#xff…

SQL Server数据库 -- 表的基础查询

文章目录 一、单表查询基本结构二、单表查询结构语法 select聚合函数where模糊查询order bygroup byhaving三、多表查询基本结构四、多表查询结构语法 内连接自连接外连接五、总结 前言 学习了数据库,在以后公司等地方,你可能不会用到创建数据库或者表格…

Android应用开发(5)Activity生命周期

Android应用开发学习笔记——目录索引 参考android官网: https://developer.android.google.cn/reference/android/app/Activity.html activity 生命周期的阶段 | Android 开发者 | Android Developers activity生命周期(这篇足够了)_…

创建微信小程序的几种方式

创建微信小程序的几种方式 1. 使用原生方式 在官网上下载微信开发者工具,之后使用微信开发者工具新建项目即可。 微信这边提供了多个模板,可以直接下载模板快速搭建上线,也可以使用空白模板根据需求自行编写。 空白模板项目结构&#xff1…

Android自定义View合集

文章目录 自定义QQ步数QQ计步效果分析自定义View分析的常用步骤自定义属性获取自定义属性画外圆弧画内圆画文字增加动画让其动起来 自定义评分控件RatingBar自定义评分View效果分析自定义属性获取自定义属性重写onMeasure()方法画出对应数量的星星触摸事件处理 自定义酷狗侧滑菜…

Linux基础+命令操作+mysql、tomcat、nginx、RabbitMQ、Redis,ElasticSearch

配置代理 一、永久设置 //编辑配置文件 vi /etc/profile //在该配置文件的最后添加代理配置 export http_proxyhttp://f1336515:password10.137.255.169:3128 //代理服务器ip地址和端口号 export https_proxyhttp://f1336515:password10.137.255.169:3128 //代理服务器ip…

【博客671】prometheus如何选择数据点以及处理counter跳变

prometheus如何选择数据点以及处理counter跳变 1、prometheus如何选择数据点 时间是怎么进来的?范围和即时查询! 您可能已经注意到,PromQL 查询中对时间的唯一引用是相对引用(例如[5m],回顾 5 分钟)。那…

一键轻松造数据:通过Postman实现表单提交

一、原始需求的诞生 在测试的过程中,需要大量的表单。于是我选择了通过postman发送表单提交的接口来造数据。 如上图所示,表单提交接口所需的参数以及请求体中需模拟的IP地址。参数为 {{}} 的表示需要不同的实参,至于原因就不在这里赘述了。如…