> Linux集群 > Hadoop >

Hadoop HDFS 升级到2.0 笔记

首先先看一下文档:

http://dongxicheng.org/mapreduce-nextgen/hadoop-upgrade-to-version-2/ 

http://dongxicheng.org/mapreduce-nextgen/hadoop-upgrade-in-version-1/

http://www.cloudera.com/content/cloudera-content/cloudera-docs/CDH4/latest/CDH4-Installation-Guide/cdh4ig_topic_6_3.html

http://bupt04406.iteye.com/blog/1920585

http://hadoop.apache.org/docs/r2.2.0/hadoop-yarn/hadoop-yarn-site/HDFSHighAvailabilityWithQJM.html

 

HDFS升级,是hadoop集群升级到2.0的关键,而hdfs升级,最重要的是namenode的升级。

首先声明:在 HA 模式下,namenode是不能升级的!

 

2013-10-25 16:28:24,669 FATAL org.apache.hadoop.hdfs.server.namenode.NameNode: Exception in namenode join
org.apache.hadoop.HadoopIllegalArgumentException: Invalid startup option. Cannot perform DFS upgrade with HA enabled

 

so,先使用非ha模式将namenode的元数据升级:

 

 step 1: 做下saveNamespace操作,停掉集群,并备份下 HDFS 的 Metadata

             1.1 让namenode进入safe mode状态
                 $ bin/hadoop dfsadmin -safemode enter
             1.2 执行saveNamespace操作

             $ bin/hadoop dfsadmin -saveNamespace

             1.3 stop 集群 

             1.4 备份 dfs.name.dir 下面的元数据

step2:
     将集群环境换成2.0的:       
      hadoop-daemon.sh start namenode -upgrade 
     
step3:
 
     namenode升级完成后,将datanode启动,datanode会自动升级到与namenode相同版本
 
     关闭集群
     将升级完的namenode元数据一些参数修改一下,改成ha模式:
     这时需要将journalnode的元文件的VERSION文件的参数修改,改成与namenode的元数据相同
     或者使用 命令:
   bin/hdfs namenode  -initializeSharedEdits
     启动 journalnode
     启动namenode
     启动datanode
     hdfs haadmin -transitionToActive nn1
     
     将active namenode的 {dfs.namenode.name.dir} 目录的内容复制到 standby namenode的{dfs.namenode.name.dir} 目录下
     然后 启动 standby namenode
     或者使用命令:hdfs namenode -bootstrapStandby    作用与直接拷贝元数据类似
 
    * 否则,会出大问题*
     2013-10-28 17:36:13,818 FATAL org.apache.hadoop.hdfs.server.namenode.NameNode: Exception in namenode join
java.io.IOException: There appears to be a gap in the edit log.  We expected txid 2, but got txid 7.
https://issues.apache.org/jira/i#browse/HDFS-5058



(责任编辑:IT)