从Hadoop1.x集群升级到Hadoop2.x失败回滚步骤

《从Hadoop1.x集群升级到Hadoop2.x步骤》文章中简单地介绍了如何从Hadoop1.x集群升级到Hadoop2.x,那里面只讨论了成功升级,那么如果集群升级失败了,我们该如何从失败中回滚呢?这正是本文所有讨论的。本文将以hadoop-0.20.2-cdh3u4升级到Hadoop-2.2.0升级失败后,如何回滚。

  1、如果你将Hadoop1.x升级到Hadoop2.x的过程中失败了,当你想在Hadoop1.x中再次启动那些守护进程,你将会遇到以下的问题:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
[wyp @master hadoop- 0.20 . 2 -cdh3u4]$ bin/start-all.sh
starting namenode, logging to
    /home/wyp/hadoop- 0.20 . 2 -cdh3u4/logs/hadoop-wyp-namenode-master.out
localhost: starting datanode, logging to
    /home/wyp/hadoop- 0.20 . 2 -cdh3u4/logs/hadoop-wyp-datanode-master.out
localhost: starting secondarynamenode, logging to
    /home/wyp/hadoop- 0.20 . 2 -cdh3u4/logs/hadoop-wyp-secondarynamenode-master.out
starting jobtracker, logging to
    /home/wyp/hadoop- 0.20 . 2 -cdh3u4/logs/hadoop-wyp-jobtracker-master.out
localhost: starting tasktracker, logging to
    /home/wyp/hadoop- 0.20 . 2 -cdh3u4/logs/hadoop-wyp-tasktracker-master.out
[wyp @master hadoop- 0.20 . 2 -cdh3u4]$ jps
2082 JobTracker
1974 SecondaryNameNode
2300 Jps
2227 TaskTracker
1796 DataNode

当运行start-all.sh脚本时,你会发现NameNode守护进程是不能启动的,以下是启动NameNode出现错误的记录:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2013 - 12 - 02 18 : 06 : 18 , 659 ERROR org.apache.hadoop.hdfs.server.
                  namenode.FSNamesystem: FSNamesystem initialization failed.
org.apache.hadoop.hdfs.server.common.IncorrectVersionException:
            Unexpected version of storage directory /home/hadoop- 1.2 . 1 /name.
            Reported: - 47 . Expecting = - 19 .
  at org.apache.hadoop.hdfs.server.common.Storage.getFields(Storage.java: 743 )
  at org.apache.hadoop.hdfs.server.
                                namenode.FSImage.getFields(FSImage.java: 557 )
  at org.apache.hadoop.hdfs.server.common.
                                Storage$StorageDirectory.read(Storage.java: 223 )
  at org.apache.hadoop.hdfs.server.common.
                                Storage$StorageDirectory.read(Storage.java: 212 )
  at org.apache.hadoop.hdfs.server.namenode.
                                FSImage.recoverTransitionRead(FSImage.java: 320 )
  at org.apache.hadoop.hdfs.server.namenode.
                                FSDirectory.loadFSImage(FSDirectory.java: 110 )
  at org.apache.hadoop.hdfs.server.namenode.
                                FSNamesystem.initialize(FSNamesystem.java: 372 )
  at org.apache.hadoop.hdfs.server.namenode.
                                FSNamesystem.<init>(FSNamesystem.java: 335 )
  at org.apache.hadoop.hdfs.server.namenode.
                                NameNode.initialize(NameNode.java: 271 )
  at org.apache.hadoop.hdfs.server.namenode.
                                NameNode.</init><init>(NameNode.java: 467 )
  at org.apache.hadoop.hdfs.server.namenode.
                                NameNode.createNameNode(NameNode.java: 1330 )
  at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java: 1339 )

  其中的/home/hadoop-1.2.1/name目录是Hadoop存放元数据的目录,也就是Hadoop1.x的${HADOOP_HOME}/conf/hdfs-site.xml中dfs.name.dir属性指向的目录(在Hadoop2.2.0的${HADOOP_HOMOE}/etc/hadoop/hdfs-site.xml中dfs.namenode.name.dir指向的目录)。上面的错误报出元数据版本出现了问题,因为刚刚在升级Hadoop的过程中版本文件被修改了,记录这个版本的文件在${dfs.name.dir}/current/VERSION文件中,里面有个layoutVersion属性就是版本的值。那么如何来回滚呢?需要知道的一点是,在Hadoop升级的过程中,Hadoop会在${dfs.name.dir}目录中生成一个previous.checkpoint文件夹,previous.checkpoint文件夹里面的东西就是升级前${dfs.name.dir}/current目录中的一个备份,既然是个备份,那么它的目录结果应该和${dfs.name.dir}/current目录结构一样,事实上也是如此。那么我们可以用这个备份来回滚到升级之前的状态。步骤如下:
  2、运行bin/hadoop-daemon.sh start namenode -rollback(注意这个是在Hadoop1.x里面运行,而不是Hadoop2.x,同时注意配置好HADOOP_HOME)对namenode进行回滚。

1
2
[wyp @master hadoop- 0.20 . 2 -cdh3u4]$ bin/hadoop-daemon.sh start         \
                                              namenode -rollback

就这条命令就可以从失败中回滚!回滚之后HDFS的状态就是你升级前集群的状态,也可以访问HDFS里面的数据。

  再说一点:如果你在升级过程中启动了Hadoop2.x的datanode守护进程,那么只回滚namenode是不行的,还需要对datanode进行回滚,命令如下:

1
2
[wyp @master hadoop- 0.20 . 2 -cdh3u4]$ bin/hadoop-daemon.sh start         \
                                              datanode -rollback
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值