Hadoop迁移Namenode
个人小站,正在持续整理中,欢迎访问:http://shitouer.cn
小站博文地址:Hadoop迁移Namenode
一.前提及方案
操作版本:社区版 Hadoop-1.0.3,其他版本不保证
之前HBase没有考虑压缩,经过一段时间的研究和测试,打算在HBase中全面采用snappy压缩库。但是在节点上配置snappy时,发现其要求glibc版本在2.5+,而当前系统CentOS-4.8的glibc是2.3.4,CentOS-4.8不支持独立升级glibc到2.5+,所以只能整个集群升级系统到CentOS5。逐台升级,这就牵扯到Namenode节点也要升级,这就需要在不丢失数据的情况下将Namenode迁移到其他服务器,特在此记录操作流程,供后续参考。
因为集群初始时没有设置SecondaryNamenode,一开始考虑觉得还挺困难,但是后来仔细一想,其实Hadoop集群是“机器不相关”(或者IP不相关?)的,无论是那台机器做Namenode,只要配置指向该节点,且该节点文件路径与原Namenode一致,则其他Datanode节点就应该会很傻很天真的以为它就是Namenode节点。
二. edits和fsimage介绍
集群NameNode把文件系统(HDFS)的变化追加保存到日志文件edits中。
当NameNode启动时,会从镜像文件 fsimage 中读取HDFS的状态,并且把edits文件中记录的操作应用到fsimage,也就是合并到fsimage中去。合并后更新fsimage的HDFS状态,创建一个新的edits文件来记录文件系统的变化。
与此相关的主要文件存储位置在hdfs-site.xml中设置 :
<property> <name>dfs.name.dir</name> <value>/data1/hadoopdata1/dfs/name,/data1/hadoopdata2/dfs/name</value> </property> |
三. 具体操作步骤
1. 停掉Hadoop及相关集群
2. 备份dfs.name.dir所指向的目录及文件
3. 修改$HADOOP_HOME/conf/下配置文件
- 修改core-site.xml中fs.default.name,将原hostname改为新主机hostname
- 修改mapred-site.xml中mapred.job.tracker,将原hostname改为新主机hostname
- 检查slaves文件和master文件(因为很多时候是从原集群中剥离一台机器,所以要特别注意是否有遗漏)
- 修改其他相关配置文件的配置(如有HBase,需要修改hbase-site.xml中hbase.rootdir等,所以尽量仔细检查各个配置文件)
4. 建立新Namenode到其自身及其他Datanode节点间的互信
5. 将第2步中备份的文件拷贝到新Namenode节点,且按照原Namenode文件结构放置文件
6. 将第3步中修改后的配置文件分发到其他Datanode节点
7. 启动HDFS,查看NameNode、SecondaryNameNode和各个DataNode状态是否正常
8. 启动MapReduce,查看TaskTracker、ZooKeeper、RegionServer状态是否存在异常
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决