Fsimage和Edits概述及其作用

本文详细介绍了HDFS中NameNode的元数据管理机制,包括Fsimage和EditLog的作用及交互流程,SecondaryNameNode如何协助合并元数据文件,以及元数据信息的配置与故障恢复过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


目标:掌握Fsumage和Edits的作用

1.NameNode元数据解析

1.预备知识

元数据(Metadata),又称中介数据、中继数据,为描述数据的数据(data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。

2.元数据的解析

1.第一次启动namenode格式化后,创建fsimage和edits文件。如果不是第一次启动,直接加载edits和fsimage文件到内存
2.客户端对元数据进行增删改的请求
3.namenode记录操作日志,更新滚动日志
4.namenode在内存中对数据进行增删改查。

2.Fsimage和Edits的作用

在这里插入图片描述
fsimage保存了最新的元数据检查点,在HDFS启动时加载fsimage的信息,包含了整个HDFS文件系统的所有目录和文件的信息。

对于文件来说包括了数据块描述信息、修改时间、访问时间等。

对于目录来说包括修改时间、访问权限控制信息(目录所属用户,所在组)等。

editlog主要是在NameNode已经启动情况下对HDFS进行的各种更新操作进行记录,HDFS客户端执行所有的写操作都会被记录到editlog中。

Fsimage,editlog主要用于在集群启动时将集群的状态恢复到关闭前的状态。

为了达到这个目的,集群启动时将Fsimage、editlog加载到内存中,进行合并,合并后恢复完成。

3.元数据信息目录的配置

hdfs-site.xml当中:

<property>
  <name>dfs.namenode.name.dir</name>
     <value>
file://hadoop软件包所在路径/HadoopDatas/namenodeDatas
</value>
</property>
<property>
   <name>dfs.namenode.edits.dir</name>
   <value>
file://hadoop软件包所在路径/HadoopDatas/dfs/nn/edits
</value>
</property>

4.FSimage文件当中的文件信息查看

1.将fsimage文件转为xml文件:
hdfs oiv -i fsimage文件绝对路径 -p XML -o hello.xml

2.查看文件信息
cat hello.xml

5.edits当中的文件信息查看

1.将edits文件转为xml文件
hdfs oev -i  edits文件绝对路径 -o myedit.xml -p XML

2.查看文件信息
cat myedit.xml

6.SecondarynameNode如何辅助管理FSImage与Edits文件

目标:掌握secondaynameNode是如何辅助nameNode合并Fsimage和Edits的

SecondarynameNode产生背景:

1.由于editlog记录了集群运行期间所有对HDFS的相关操作,所以这个文件会很大。

2.集群关闭后再次启动时会将Fsimage,editlog加载到内存中,进行合并,恢复到集群的。

3.由于editlog文件很大所有,集群再次启动时会花费较长时间。

4.为了加快集群的启动时间,所以使用secondarynameNode辅助NameNode合并Fsimage,editlog。

原理:

在这里插入图片描述
1、 secnonaryNN通知NameNode切换editlog
2、secondaryNN从NameNode中获得FSImage和editlog(通过http方式)
3、secondaryNN将FSImage载入内存,然后开始合并editlog,合并之后成为新的fsimage
4、secondaryNN将新的fsimage发回给NameNode
5、NameNode用新的fsimage替换旧的fsimage

注:
1.完成合并的是secondarynamenode,会请求namenode停止使用edits,暂时将新写操作放入一个新的文件中(edits.new)。secondarynamenode从namenode中通过http get获得edits,因为要和fsimage合并,所以也是通过http get 的方式把fsimage加载到内存,然后逐一执行具体对文件系统的操作,与fsimage合并,生成新的fsimage,然后把fsimage发送给namenode,通过http post的方式。namenode从secondarynamenode获得了fsimage后会把原有的fsimage替换为新的fsimage,把edits.new变成edits。

2.Hadoop进入安全模式时需要管理员使用dfsadmin的save namespace来创建新的检查点。

3.secondarynamenode在合并edits和fsimage时需要消耗的内存和namenode差不多,所以一般把namenode和secondarynamenode放在不同的机器上。

7.fsimage与edits的合并周期影响因素

1.时间因素:默认一个小时为一个周期fsimage与edits合并一次
2.次数因素:当hdfs次数达到1000000 也会触发合并
3.以60s为一个周期,当hdfs的操作次数超过1000000 也会触发合并

8.namenode元数据信息多目录配置

目的:为了保证元数据的安全性,我们一般都是先确定好我们的磁盘挂载目录,将元数据的磁盘做RAID1,每个目录存放内容相同,增加了可靠性。

配置:

hdfs-site.xml
<property>
   <name>dfs.namenode.name.dir</name>
<value>
file:///export/servers/Hadoop-2.6.0-cdh5.14.0/HadoopDatas/namenodeDatas,
file:///export/servers/Hadoop-2.6.0-cdh5.14.0/HadoopDatas/namenodeDatas,
file:///export/servers/Hadoop-2.6.0-cdh5.14.0/HadoopDatas/namenodeDatas,
file:///export/servers/Hadoop-2.6.0-cdh5.14.0/HadoopDatas/namenodeDatas,
</value>
</property>

9.namenode故障恢复

目标:掌握nameNode故障后如何恢复

secondaryNamenode对namenode当中的fsimage和edits进行合并时,每次都会先将namenode的fsimage与edits文件拷贝一份过来,所以fsimage与edits文件在secondarNamendoe当中也会保存有一份,如果namenode的fsimage与edits文件损坏,那么我们可以将secondaryNamenode当中的fsimage与edits拷贝过去给namenode继续使用,只不过有可能会丢失一部分数据。这里涉及到几个配置选项

1.namenode保存fsimage的配置路径

<property>
                <name>dfs.namenode.name.dir</name>
                <value>file:///export/servers/Hadoop-2.6.0-cdh5.14.0/HadoopDatas/namenodeDatas</value>
</property>

2.namenode保存edits文件的配置路径

<property>
                <name>dfs.namenode.edits.dir</name>
                <value>file:///export/servers/Hadoop-2.6.0-cdh5.14.0/HadoopDatas/dfs/nn/edits</value>
</property>

3.secondaryNamenode保存fsimage文件的配置路径

<property>
                <name>dfs.namenode.checkpoint.dir</name>
                <value>file:///export/servers/Hadoop-2.6.0-cdh5.14.0/HadoopDatas/dfs/snn/name</value>
</property>

4.secondaryNamenode保存edits文件的配置路径

<property>
                <name>dfs.namenode.checkpoint.edits.dir</name>
                <value>file:///export/servers/Hadoop-2.6.0-cdh5.14.0/HadoopDatas/dfs/nn/snn/edits</value>
</property>

5.故障恢复步骤

1.杀死namenode进程
2.删除namenode的fsimage与edits文件
3.拷贝secondaryNamenode的fsimage与edits文件到namenode的fsimage与edits文件夹下面去
4.启动namenode
5.浏览器页面正常访问

注:当在Secondaynamenode周期内操作的新操作日志和元数据没有保存在secondaryNamenode中,若在周期外,则代表新数据已经保存在secondaryNamenode中。

4.3.1 数据处理技术 4.3.1.1数据传输技术 数据传输技术主要使用KafkaFlume搭建一个高可用高稳定的数据传输通道。数据存储技术主要使用HDFSHive进行存储数据仓库的搭建。实时计算技术主要是使用Flink进行实时数据的计算与统计,保证数据的时效性。可视化技术主要使用ECharts,ECharts用作大屏图表可视化的显示。 4.3.1.1.1消息传输队列Kafka Kafka是一个分布式的基于发布订阅模式的消息队列,可以用来对数据源数据存储部分进行解耦,异步进行传输发送数据,不需要维护代码,不需要考虑调用是否成功或失败超时。更为重要的场景是Kafka可以用来削峰,当在数据产生的峰值时刻,用Kafka暂存数据积压消息,等到峰值过去再对Kafka中的数据进行消费,防止峰值并发使得消费端崩溃。Kafka的主要特点如下: (1)可达十万级的单机吞叶量,单节点连接若于客户端,底层采用分布式架检零拷贝原理,一般配合大数据系统进行实时数据计算日志采集的场景。 (2)可用性设计优秀,根据Kaka的副本设计原理,数据有多个副本存于不同的机器中,即使有机器岩机也不会使数据彻底消失,保证了消息队列的可用性。 (3)支持动态扩展,多个producer、brokerconsumer的设计使得只需要修改少量配置就可以实现动态扩展机器。 Kafka的架构主要由producer、consumer、broker、topicpartition组成,具体架构如图2-4所示。 (1)Broker Kafka使用时通常是建立了多台服务器组成一个集群,每台服务器节点就是一个Broker。 (2)Topic Topic就相当于是一个存储消息的队列,只需要确定topic就可以实现数据的生产或消费,不用管理数据的物理存储。 (3)Producer 消息的生产者,生产者顾名思义就是生产消息发送到队列中,等待消费者进行消费。 (4)Consumer 消息的消费者,多个消费者可以组成一个消费者组。 (5)Partition 一个topic可以被分割为多个partition,分布在不同的broker上,每个partition中的数据存储在多个segment文件中。 图2-4 Kafka架构 4.3.1.1.2日志采集系统Flume Flume是一款实时日志收集系统,受到了使用者的认可广泛应用,主要用于实时读取服务器本地磁盘的数据写入到HDFS中。Flume运行后JVM工作进程为一个Agent,其中覆盖输入端、通道、输出端组件,Flume的组成架构如图2-5所示。 (1)agent 一个JVM进程,以事件形式将数据从源头发往目的地。 (2)source 用于接收不同类型的数据到agent。 (3)channel sourcesink之间的缓冲区,允许sourcesink运行在不同速率,可以同时处理多个source的写入多个sink的读取。 (4)sink 不断轮询channel中事件并批量移除,写入不同类型的目的地。 图2-5 Flume架构 4.3.1.2数据存储技术 4.3.1.2.1分布式文件系统HDFS HDFS是分布式文件管理系统的一种,通过目录树来定位文件,主要用于一次写入、多次读出的场景且不支持文件的修改的场景。 HDFS的优点在于高容错性、处理海量数据、可构建在廉价机器。数据会自动保存多个副本,增加副本的形式,提高容错性。某一个副本丢失,自动恢复。HDFS的缺点在于不适合低延迟数据访问、无法高效对大量小文件进行存储、不支持并发写入文件的随即修改。 HDFS采用主从读写分离的架构,通常一个集群拥有一到两个master若干个slave,HDFS的组成架构如图2-6所示。 (1)NameNode NameNode就是master,主要负责管理HDFS的名称空间、配置副本策略、管理数据块的映射信息、处理客户端的读写请求。 (2)DataNode DataNode就是slave,NameNode下达命令,DataNode执行实际的操作。主要负责存储实际的数据块、执行数据块的读写操作。 (3)Client 客户端的功能主要是与NameNodeDataNode交互。同时文件上传HDFS的时候,客户端将文件切分成一个一个的block,然后进行上传。 (4)SecondaryNameNode 主要是辅助NameNode,hdfs运行时需要定期进行FsImageEdits的合并,如果这个操作由NameNode节点完成,又会效率过低。因此,引入一个新的节点SecondaryNamenode,专门用于FsImageEdits的合并。 图2-6 HDFS架构图 4.3.1.2.2数据仓库平台Hive Hive是基于Hadoop构建的一套数据仓库分析系统,将存入的数据转化映射成表结构,再用Hive的HOL语言进行查询,通过数据库的方式来操作HDFS文件系统为了简化编程,底层计算方式为其他常用计算引擎。Hive是面向行储存的数据库。Hive本身不存储计算数据,它完全依赖底层的存储框架计算引擎,Hive主要是建立处理表的逻辑。Hive的架构原理如图2-7所示。 图2-7 hive架构图 4.3.1.3实时计算技术 Flink是为分布式、高性能、随时可用以及准确的流处理应用程序打造的开源流处理框架。 因为传统hive底层是使用MapReduce进行计算,这就带来了一些问题,MapReduce适合于离线计算,执行延迟比较高,且对于处理批量小数据显得十分乏力。所以,本项目中将MapReduce替换成Flink引擎,经过测试,Flink引擎在最差情况下也比MapReduce快10倍,可以达到实时计算的要求。 之所以采用Flink引擎主要在于以下四个方面的考虑,这也是实时数仓方面关注的比较核心的问题。第一个是状态管理,实时数仓里面会进行很多的聚合计算,这些都需要对于状态进行访问管理,Flink在这方面比较成熟。第二个是表义能力,Flink提供极为丰富的多层次API,包括StreamAPI、TableAPI以及FlinkSOL。第三个是生态完善,实时数仓的用途广泛,用户对于多种存储有访问需求,Flink对于这方面的支持也比较完善。最后一点就是Flink提供了流批统一的可能性。 Flink的架构图如图2-8所示。 图2-8 Flink架构图 4.3.1.4可视化技术 4.3.1.4.1数据可视化工具ECharts 使用ECharts进行数据可视化。ECharts是一个开源的、显示效果丰富的一个可视化组件。它支持多种浏览器,并且可以非常简单的往前端页面添加动态直观的图表。ECharts提供了丰富的API接口以及文档,通过合理设置并结合后台传送的Json数据,即可展示所需要的数据主题。 ECharts具备如下特性:可视化类型十分齐全、可以直接使用多种类型数据、前端可展示海量数据、优化了移动端的显示效果、跨平台等特点。与其他开源的可视化组件相比,ECharts主要有以下特点: (1)导入简单,配置方便 开发人员只需要在视图级别导入ECharts.js文件,然后他们就可以通过Ajax调用后端模型层控制层,传递需求并返回结果。ECharts提供了丰富的图形显示控制方法,并且可以通过选项设置来控制数据显示形式、值范围其他控制细节。 (2)丰富的图表类型 ECharts的底层依赖于支持Canvas渲染的开源渲染引擎Zender。它具有可视化的图表类型,包括直方图,雷达图地图,并且可以提供多个交互式坐标系,时间轴工具箱组件。通过Ajax技术及其自身的事件机制,可以将数据主题图形与背景数据链接起来,从而增强了数据集成挖掘的能力。 (3)轻量数据传输 ECharts图形组件支持json格式数据的异步加载。随着版本的迭代开发,其通用图表已支持呈现数千万的数据,从而为相关人员提供了更好的性能体验。 仿照上述文字 帮我写一个数据处理技术实现方案
最新发布
07-26
<think>嗯,用户问的是HDFS中的SecondaryNameNodeHA中的Standby NameNode是不是同一个概念。首先,我需要确认自己对这两个概念的理解是否正确。 SecondaryNameNode,我记得在早期的Hadoop版本中,它的作用主要是帮助NameNode合并FsImageEdits,防止Edits日志过大导致恢复时间过长。它并不是NameNode的备份,而是一个辅助节点,定期执行检查点操作。所以它的主要职责是维护元数据,而不是提供高可用性。 而Standby NameNode是在Hadoop高可用性(HA)架构中引入的。在HA模式下,通常有一个Active NameNode一个或多个Standby NameNode。Standby NameNode会实时同步Active NameNode的Edits日志,保持元数据的最新状态,以便在主节点故障时快速接管。这里Standby NameNode确实作为热备份存在,确保高可用性。 用户可能混淆了这两个概念,因为它们都涉及到NameNode的辅助节点,但功能完全不同。需要明确区分SecondaryNameNode的作用是合并元数据,而Standby NameNode是为了故障转移。此外,用户可能是在学习HDFS架构时遇到了困惑,或者在配置集群时对这两个节点的角色不清楚,需要澄清它们的不同用途。 还需要考虑用户的实际应用场景。如果他们正在设置HA集群,了解Standby NameNode的重要性是关键;而如果是在处理元数据合并的问题,SecondaryNameNode的角色更相关。同时,用户可能没有意识到在启用HA后,SecondaryNameNode通常不再需要,因为Standby NameNode会接管其检查点功能。 在回答时,要结构清晰,分点说明两者的定义、职责工作机制的不同,并指出在HA环境下SecondaryNameNode是否还存在。可能需要提到Hadoop版本的变化,比如在HA引入后,SecondaryNameNode的角色被Standby替代,帮助用户理解演进过程。此外,使用示例或比喻可能有助于用户更好地区分两者的不同,比如将SecondaryNameNode比作“清洁工”,而Standby则是“备胎”。</think>以下是关于SecondaryNameNode与Standby NameNode的详细对比分析: --- ### **一、核心结论** **不是同一个概念**。两者虽然都是NameNode的辅助节点,但在功能定位、工作机制适用场景上有本质区别。 --- ### **二、SecondaryNameNode详解** #### 1. **设计目标** - **非高可用组件**:专为解决单NameNode架构下元数据合并问题 - **核心任务**:定期执行**检查点(checkpoint)** 操作,合并FsImageEdits文件 #### 2. **工作机制** - **定期触发条件**: - 默认每小时执行一次 - Edits文件大小达到阈值(默认64MB) - **操作流程**: 1. 从NameNode请求当前FsImageEdits 2. 在本地合并生成新FsImage 3. 将新FsImage传回NameNode - **关键限制**: - **不提供故障接管能力** - 合并期间NameNode可能短暂卡顿 #### 3. **典型部署场景** ```mermaid graph LR A[Active NameNode] -->|推送FsImage+Edits| B(SecondaryNameNode) B -->|返回新FsImage| A ``` --- ### **三、Standby NameNode详解** #### 1. **设计目标** - **HA架构的核心组件**:实现NameNode的热备份 - **核心能力**:实时故障转移(RTO<30秒) #### 2. **工作机制** - **实时同步**: - 通过JournalNode集群同步Edits日志 - 保持与Active NameNode的**元数据一致性** - **检查点合并**: - **接管SecondaryNameNode的职责**,在后台自动执行合并 - **故障转移流程**: 1. ZKFC检测到Active节点故障 2. 通过ZooKeeper完成锁抢占 3. 加载最新FsImage并应用未合并Edits 4. 切换为Active状态 #### 3. **典型部署场景** ```mermaid graph TD A[Active NameNode] -->|写入Edits| J[JournalNode集群] S[Standby NameNode] -->|读取Edits| J Z[ZKFC] -->|心跳检测| A Z -->|心跳检测| S ``` --- ### **四、关键差异对比表** | 特征 | SecondaryNameNode | Standby NameNode | |---------------------|-------------------------|---------------------------| | **设计目的** | 元数据合并 | 故障热备 | | **高可用支持** | 不支持 | 必需组件 | | **数据同步方式** | 定期拉取 | 实时同步 | | **故障接管能力** | 无 | 自动接管(30秒内) | | **元数据一致性** | 合并时可能有延迟 | 实时一致 | | **Hadoop版本依赖** | 早于2.x版本 | Hadoop 2.x+ HA架构 | | **典型部署数量** | 1个 | ≥1个(通常1主1备) | --- ### **五、版本演进关系** 1. **Hadoop 1.x时代**: - 只有SecondaryNameNode,无HA方案 - 单点故障风险显著 2. **Hadoop 2.x+**: - 引入HA架构后,**Standby NN完全取代SecondaryNameNode** - 检查点合并由Standby NN后台自动完成 - 若启用HA后仍配置SecondaryNameNode,会导致: - 资源浪费 - 潜在元数据冲突 --- ### **六、实际部署建议** 1. **非HA集群**: - 必须部署SecondaryNameNode - 建议配置检查点间隔: ```xml <!-- hdfs-site.xml --> <property> <name>dfs.namenode.checkpoint.period</name> <value>3600</value> <!-- 单位:秒 --> </property> ``` 2. **HA集群**: - 禁止部署SecondaryNameNode - Standby NN自动优化合并策略: ```xml <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> ``` --- ### **七、常见误区澄清** - **误区1**:"Standby NN是SecondaryNameNode的升级版" - 事实:两者解决不同维度问题(HA vs 元数据维护) - **误区2**:"可以同时部署两种节点" - 后果:会导致Edits日志被重复修改,引发元数据损坏 - **误区3**:"SecondaryNameNode能提供读服务" - 实际:它不响应任何客户端请求 --- 通过这种对比分析,可以清晰理解两者在HDFS架构中的不同定位。实际生产环境中,建议直接采用HA方案,既解决单点故障问题,又自动包含元数据维护功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据老人家i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值