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状态是否存在异常

猜你喜欢

转载自qq85609655.iteye.com/blog/2199232