NameNode主要是 用来保存HDFS的元数据信息,比如命名空间信息,块信息等 。当它运行的时候,这些信息是 存在内存中 的。但是这些信息也可以持久化到磁盘上。
上面的这张图片展示了NameNode怎么把元数据保存到磁盘上的。这里有两个不同的文件:
fsimage - 它是在NameNode启动时对整个 文件系统的快照
edit logs - 它是在NameNode启动后,对 文件系统的改动序列
只有在NameNode重启时,edit logs才会合并到fsimage文件中,从而得到一个文件系统的最新快照。但是在产品集群中NameNode是很少重启的,这也意味着当NameNode运行了很长时间后,edit logs文件会变得很大。在这种情况下就会出现下面一些问题:
edit logs文件会变的很大,怎么去管理这个文件是一个挑战。
NameNode的重启会花费很长时间,因为有很多改动[笔判首者注:在edit logs中]要合并到fsimage文件上。
如果NameNode挂掉了,那我们就丢失了很多改动因为此时的fsimage文件非常旧。
因此为了克服这个问题,我们需要一个 易于管理的机制来帮助我们减小edit logs文件的大小和得到一个最新的fsimage文件,这样也会减小在NameNode上的压力。 这跟Windows的恢复点是非常像的,Windows的恢复点机制允许我们对OS进行快照,这样当系统发生问题时,我们能够回滚到最新的一次恢复点上。
现在我们明白了NameNode的功能和所面临的挑战 - 保持文件系统最新的元数据。那么,这些跟Secondary NameNode又有什么关系呢?
Secondary NameNode
SecondaryNameNode就是来帮助解决上述问题的,它的 职责是合并NameNode的edit logs到fsimage文件中。
这里写图片描述
上面的图片展示了Secondary NameNode是怎么工作的。
首先,它定时到NameNode去获取edit logs,并更新到fsimage上。[笔者注:Secondary NameNode自己的fsimage]
一旦它有了新的fsimage文件,它 将其拷贝回NameNode中 。
NameNode在下次重启时会使用这个新的fsimage文件, 从而减少重启慎激的时间 。
Secondary NameNode的整个 目的是在HDFS中提供一个检查点 。它只是NameNode的一个助手节点。这也是它在社区内被认为是检查点节点的原因。
现在,我们明白了宽冲袜Secondary NameNode所做的不过是在文件系统中设置一个检查点 来帮助NameNode更好的工作 。它不是要取代掉NameNode也不是NameNode的备份。所以从现在起,让我们养成一个习惯,称呼它为检查点节点吧。
恢复步骤:(0) 可选,当namenode主机名发生变化时(为了不影响应用,最好不好发生变化),需修改:
[core-site.xml] fs.default.name = 新namenode
[hdfs-site.xml] dfs.http.address = 新namenode
[mapred-site.xml]mapred.job.tracker = 新jobtracker, 如果jobtracker与namenode在同一野袜空台机器上
(1) 确保新namenode ${dfs.name.dir}目录存在,且清空其内容
(2) 把SecondaryNameNode节点中 ${fs.checkpoint.dir} 的所有内容拷贝到新的NameNode节点的 ${fs.checkpoint.dir} 目录中
(3) 在新机器上执行
hadoop namenode -importCheckpoint
该步会从${fs.checkpoint.dir}中恢复${dfs.name.dir},并请动namenode
(4) 检查文件block完整性
hadoop fsck /
(5) 停颂瞎止namenode,使用crrl+C或者会话结束
(6) 删除新namenode ${fs.checkpoint.dir}目录下的好肢文件(保持干净)
(7) 正式启动namenode,恢复工作完成
sh $HADOOP_HOME/bin/hadoop_daemon.sh start namenode
您好,Namenode是Hadoop集群中的一个关键组件,它负责管理文件系统的命名空间和客户端对文件的访问。在某些情况下,需要重启Namenode以解决一些问题,如系统崩溃或性能问题。然而,有时重启后会出现“一直在RPC连接”问题,这可能是由于以下原因导致的:1. 网络问题:Namenode无法指指连接到其他节点或客户端,可能是由于网络故障或防火墙配置不正确导致的。
2. 配置问题:Namenode的配置文件可能存在错误,导致无法正确启动或连接到其他节点。
3. 数据库问题:Namenode使用Hadoop元数据存储在数据库中,如果数据库出现问题,可能会导致连接问题。
要解决这个问题,可以尝试以下步骤:
1. 检查网络连接:确保Namenode可以连接到其他节点和客户端,并兄如且防火墙已正确配置。
2. 检查配置文件:检查Namenode的配置文件是否正确,并尝试重新启动Namenode。
3. 检查数据库:检查Hadoop元数据存储在数据库中的情况,并尝试修复任何问题。
如果这些步骤无法解决问题,可以尝试重新安装Hadoop集群或联系Hadoop支持团队以获取更多帮羡逗启助。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)