欢迎关注Hadoop、Spark、Flink、Hive、Hbase、Flume等大数据资料分享微信公共账号:iteblog_hadoop
  1. 文章总数:961
  2. 浏览总数:11,461,285
  3. 评论:3870
  4. 分类目录:103 个
  5. 注册用户数:5832
  6. 最后更新:2018年10月17日
过往记忆博客公众号iteblog_hadoop
欢迎关注微信公众号:
iteblog_hadoop
大数据技术博客公众号bigdata_ai
大数据猿:
bigdata_ai

从Hadoop1.x集群升级到Hadoop2.x步骤

  2013年10月15号,Hadoop已经升级到2.2.0稳定版了,同时带来了很多新的特性,本人所在的公司经过一个月时间对Hadoop2.2.0的测试,在确保对业务没有影响的前提下将Hadoop集群顺利的升级到Hadoop2.2.0版本,本文主要介绍如何从Hadoop1.x(本博客用到的是hadoop-0.20.2-cdh3u4)版本的集群顺利地升级到Hadoop2.2.0。

友情提示:请在读下文之间认真的读一下这里的说明

  1、为了预防升级过程中出现的各种问题,最好在集群升级的过程前先备份好集群namenode的元数据(${HADOOP_HOME}/conf/hdfs-site.xml中的dfs.name.dir所配置的文件夹),以免升级失败带来不可挽回的损失!
  2、Hadoop升级不是简单的运行下面的一些命令就达到将Hadoop1.x升级到Hadoop2.x,还需要通过大量的参数配置来达到最优,所以请不要阅读完本博客就马上在开发环境下升级Hadoop集群!你可以现在测试机上试验一下,主要是各个参数的配置。
  3、由于公司的限制,我不可能将我们线上Hadoop集群参数的配置公布在这。
  4、为了说明的方便,本文在虚拟机上面安装好了Hadoop伪分布式平台,以下所有的升级步骤和真实分布式集群升级步骤一样!
  5、本文并没有介绍想升级到有JournalNodes、active NN和standby NN的Hadoop的集群步骤,其实这些升级步骤和这个差不多,需要了解的人可以来咨询我。
  6、这里只是介绍如何将集群升级到2.x,关于如何将Mapreduce的程序从1.升级到2.x,请参见本博客《Hadoop1.x程序升级到Hadoop2.x需要的依赖库》

  1、先看下Hadoop1.x集群上面已有的数据:

[wyp@master hadoop-0.20.2-cdh3u4]$ bin/hadoop fs -ls /home/wyp/data
Found 25 items
-rw-r--r-- 2 wyp supergroup     21 2013-12-02 17:49 /home/wyp/data/1.txt
-rw-r--r-- 2 wyp supergroup     44 2013-12-02 17:49 /home/wyp/data/10.txt
-rw-r--r-- 2 wyp supergroup     27 2013-12-02 17:49 /home/wyp/data/10.txt~
-rw-r--r-- 2 wyp supergroup    224 2013-12-02 17:48 /home/wyp/data/11.txt
-rw-r--r-- 2 wyp supergroup     37 2013-12-02 17:49 /home/wyp/data/12.txt
-rw-r--r-- 2 wyp supergroup 270432 2013-12-02 17:49 /home/wyp/data/123.txt
-rw-r--r-- 2 wyp supergroup     32 2013-12-02 17:49 /home/wyp/data/2.txt
-rw-r--r-- 2 wyp supergroup     21 2013-12-02 17:49 /home/wyp/data/2.txt~
-rw-r--r-- 2 wyp supergroup    120 2013-12-02 17:49 /home/wyp/data/3.txt
-rw-r--r-- 2 wyp supergroup     30 2013-12-02 17:49 /home/wyp/data/3.txt~
-rw-r--r-- 2 wyp supergroup     29 2013-12-02 17:49 /home/wyp/data/4.txt
-rw-r--r-- 2 wyp supergroup     21 2013-12-02 17:49 /home/wyp/data/4.txt~
-rw-r--r-- 2 wyp supergroup     33 2013-12-02 17:49 /home/wyp/data/5.txt
-rw-r--r-- 2 wyp supergroup     62 2013-12-02 17:49 /home/wyp/data/6.txt
-rw-r--r-- 2 wyp supergroup    173 2013-12-02 17:49 /home/wyp/data/7
-rw-r--r-- 2 wyp supergroup    173 2013-12-02 17:49 /home/wyp/data/7~
-rw-r--r-- 2 wyp supergroup      0 2013-12-02 17:49 /home/wyp/data/8.txt
-rw-r--r-- 2 wyp supergroup      0 2013-12-02 17:49 /home/wyp/data/8.txt~
-rw-r--r-- 2 wyp supergroup     27 2013-12-02 17:48 /home/wyp/data/9.txt
drwxr-xr-x - wyp supergroup      0 2013-12-02 17:49 /home/wyp/data/ml-100k
-rw-r--r-- 2 wyp supergroup4945826 2013-12-02 17:49 /home/wyp/data/ml-100k.zip
drwxr-xr-x - wyp supergroup      0 2013-12-02 17:49 /home/wyp/data/ml-10M100K
-rw-r--r-- 2 wyp supergroup6629634 2013-12-02 17:49 /home/wyp/data/ml-10m.zip
-rw-r--r-- 2 wyp supergroup      9 2013-12-02 17:49 /home/wyp/data/reduce.sh
-rw-r--r-- 2 wyp supergroup      0 2013-12-02 17:49 /home/wyp/data/result

  2、关掉hadoop-0.20.2-cdh3u4版本的守护线程,并将关于Hadoop1.x所有的相关的环境变量(HADOOP_HOME、PATH等相关环境变量配置)删掉(如果有),以防对Hadoop2.2.0升级的影响。
  3、将Hadoop2.2.0的${HADOOP_HOMOE}/etc/hadoop/hdfs-site.xml中dfs.namenode.name.dir和dfs.datanode.data.di属性的值分别指向Hadoop1.x的${HADOOP_HOME}/conf/hdfs-site.xml中dfs.name.dir和dfs.data.dir的值。
  4、启动Hadoop2.2.0(关于如何安装Hadoop2.2.0请参见本博客《在Fedora上部署Hadoop2.2.0伪布式平台》《Hadoop2.2.0完全分布式集群平台安装与设置》)相关的守护线程。

[wyp@master hadoop]$ sbin/start-dfs.sh 
Starting namenodes on [master]
master: starting namenode, logging to 
            /home/wyp/Downloads/hadoop/logs/hadoop-wyp-namenode-master.out
localhost: starting datanode, logging to 
            /home/wyp/Downloads/hadoop/logs/hadoop-wyp-datanode-master.out
Starting secondary namenodes [0.0.0.0]
0.0.0.0: starting secondarynamenode, logging to 
   /home/wyp/Downloads/hadoop/logs/hadoop-wyp-secondarynamenode-master.out
[wyp@master hadoop]$ jps
2792 SecondaryNameNode
2587 DataNode
2945 Jps

按照正常情况,运行sbin/start-dfs.sh应该会启动SecondaryNameNode、DataNode和NameNode守护进程的,但是上面并没有成功启动NameNode,应该是有错误的,去查看hadoop-wyp-namenode-master.log:

[wyp@master hadoop]$ vim logs/hadoop-wyp-namenode-master.log
2013-12-02 17:57:40,378 FATALorg.apache.hadoop.hdfs.server.namenode.NameNode: 
                                              Exception in namenode join
java.io.IOException:
File system image contains an old layout version -19.
An upgrade to version -47 is required.
Please restart NameNode with -upgrade option.
        at org.apache.hadoop.hdfs.server.namenode.
                             FSImage.recoverTransitionRead(FSImage.java:221)
        at org.apache.hadoop.hdfs.server.namenode.
                             FSNamesystem.loadFSImage(FSNamesystem.java:787)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.
                             loadFromDisk(FSNamesystem.java:568)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.
                             loadNamesystem(NameNode.java:443)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.
                             initialize(NameNode.java:491)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.
                             (NameNode.java:684)
        at org.apache.hadoop.hdfs.server.namenode.
                             NameNode.(NameNode.java:669)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.
                             createNameNode(NameNode.java:1254)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.
                             main(NameNode.java:1320)

(为了能够在一行里面显示,上面的结果经过换行处理),上面的日志信息显示出File system image contains an old layout version,并提示在启动NameNode应该带上-upgrade选项,再试一下:

[wyp@master hadoop]$ sbin/hadoop-daemon.sh start namenode -upgrade
[wyp@master hadoop]$ jps
2792 SecondaryNameNode
3126 Jps
2587 DataNode
3046 NameNode
注意:线上集群的元文件比较大,升级的时候需要修改一下namenode的内存大小配置文件在${HADOOP_HOMOE}/etc/hadoop/hadoop-env.sh里面

export HADOOP_HEAPSIZE=15000

上面的值可以根据实际情况去设置。

好了,已经有NameNode进程了,再启动其他守护线程:

[wyp@master hadoop]$ sbin/start-yarn.sh
[wyp@master hadoop]$ jps
2792 SecondaryNameNode
3222 ResourceManager
3594 Jps
3335 NodeManager
2587 DataNode
3046 NameNode

  至此,升级步骤完成,你可以查看升级之后的Hadoop2.x一样可以访问之前Hadoop1.x的数据,并没有什么错误。升级完成后,会在namenode的dfs.namenode.name.dir目录和dfs.datanode.data.dir目录下多出一个previous/ 目录。如果确认升级成功后,可以根据实际情况决定是否需要删掉这个目录,运行以下命令把以前的版本删掉:

bin/hdfs dfsadmin -finalizeUpgrade
  注意:-finalizeUpgrade 不是升级必须的,所以根据实际情况去执行。一旦执行该命令,会删掉旧版本数据,以后就不能回滚了。
  在升级过程中可能由于各种原因而导致升级失败,我将会在接下来的文章中介绍升级失败时如何回滚到升级失败之前的状态。欢迎大家关注。
  失败回滚请参见本博客:《从Hadoop1.x集群升级到Hadoop2.x失败回滚步骤》
本博客文章除特别声明,全部都是原创!
转载本文请加上:转载自过往记忆(https://www.iteblog.com/)
本文链接: 【从Hadoop1.x集群升级到Hadoop2.x步骤】(https://www.iteblog.com/archives/856.html)
喜欢 (6)
分享 (0)
发表我的评论
取消评论

表情
本博客评论系统带有自动识别垃圾评论功能,请写一些有意义的评论,谢谢!