NameNode和SecondaryNameNode(面试开发重点)

本文围绕Hadoop中NN和2NN工作机制展开。为解决元数据存储和更新问题,引入FsImage、Edits文件,又因Edits文件过大问题引入SecondaryNamenode用于合并。详细介绍了NameNode启动和Secondary NameNode工作两个阶段的具体操作流程。
部署运行你感兴趣的模型镜像

一,NN和2NN工作机制

思考:NameNode中的元数据是存储在哪里的?
首先,我们做个假设,如果存储在NameNode节点的磁盘中,因为经常需要进行随机访问,还有响应客户请求,必然是效率过低。因此,元数据需要存放在内存中。但如果只存在内存中,一旦断电,元数据丢失,整个集群就无法工作了。因此产生在磁盘中备份元数据的FsImage。
这样又会带来新的问题,当在内存中的元数据更新时,如果同时更新FsImage,就会导致效率过低,但如果不更新,就会发生一致性问题,一旦NameNode节点断电,就会产生数据丢失。因此,引入Edits文件(只进行追加操作,效率很高)。每当元数据有更新或者添加元数据时,修改内存中的元数据并追加到Edits中。这样,一旦NameNode节点断电,可以通过FsImage和Edits的合并,合成元数据。
但是,如果长时间添加数据到Edits中,会导致该文件数据过大,效率降低,而且一旦断电,恢复元数据需要的时间过长。因此,需要定期进行FsImage和Edits的合并,如果这个操作由NameNode节点完成,又会效率过低。因此,引入一个新的节点SecondaryNamenode,专门用于FsImage和Edits的合并。
NN和2NN工作机制,如图3-14所示。
在这里插入图片描述
1. 第一阶段:NameNode启动
(1)第一次启动NameNode格式化后,创建Fsimage和Edits文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。
(2)客户端对元数据进行增删改的请求。
(3)NameNode记录操作日志,更新滚动日志。
(4)NameNode在内存中对数据进行增删改。
2. 第二阶段:Secondary NameNode工作
(1)Secondary NameNode询问NameNode是否需要CheckPoint。直接带回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。

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

Hadoop批量启动时无法启动NameNodeSecondaryNameNode,可尝试以下解决办法: ### 检查配置文件 - **配置文件路径**:确保`core-site.xml`、`hdfs-site.xml`等配置文件路径正确,且配置无误。例如,`dfs.namenode.name.dir`等关键配置项的值路径存在且有读写权限。 ```xml <property> <name>dfs.namenode.name.dir</name> <value>/opt/module/hadoop-2.7.2/data/tmp/dfs/name</value> </property> ``` - **配置一致性**:检查集群中各节点的配置文件是否一致,不一致可能导致启动失败。 ### 检查端口占用 NameNodeSecondaryNameNode启动时会使用特定端口,若端口被占用则无法启动。可使用以下命令检查端口占用情况: ```bash netstat -tlnp | grep <端口号> ``` 若发现端口被占用,可通过`kill -9 <进程ID>`命令终止占用端口的进程,或者修改配置文件中的端口号。 ### 检查数据目录 - **数据目录权限**:确保NameNodeSecondaryNameNode的数据存储目录有足够的读写权限。例如,使用以下命令修改目录权限: ```bash chmod -R 755 /opt/module/hadoop-2.7.2/data/tmp/dfs/name ``` - **数据目录内容**:若数据目录内容损坏或不完整,可能导致启动失败。可尝试删除NameNode存储的数据(/opt/module/hadoop-2.7.2/data/tmp/dfs/name),再重新格式化NameNode: ```bash rm -rf /opt/module/hadoop-2.7.2/data/tmp/dfs/name/* bin/hdfs namenode -format ``` ### 检查日志文件 查看Hadoop日志文件,通常位于`$HADOOP_HOME/logs`目录下,从中获取详细的错误信息,根据错误信息进行针对性解决。 ### 检查Java环境 NameNodeSecondaryNameNode依赖Java环境,确保Java环境变量配置正确,可使用以下命令检查Java版本: ```bash java -version ``` ### 检查防火墙 防火墙可能会阻止NameNodeSecondaryNameNode之间的通信,可暂时关闭防火墙或开放相关端口: ```bash systemctl stop firewalld ``` ### 检查进程状态 使用`jps`命令检查NameNodeSecondaryNameNode进程是否已经存在,若存在可先使用`kill -9 <进程ID>`命令终止进程,再重新启动。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值