hadoop 0.20.2版本升级到1.0.3 记录

Comments: 3 Comments
Published on: 2012 年 05 月 31 日


升级分为两种,一种是集群布局不发生任何变化的,这种非常简单,十分类似安装一次新的hadoop程序;另外一种是集群布局发生变化的,这种要非常小心,因为牵扯数据安全,要让hdfs内的数据完整的迁移的新版本,所以要仔细。

两种都简单的分为几步:
1、在执行新一轮的升级前,要确保前一次升级已经定妥,用一下命令查看:

$ hadoop dfsadmin -upgradeProgress status
There are no upgrades in progress.

出现上边的提示即表示可以进行下次升级。

2、进行数据的备份,以方便升级后对照,如果有问题可发现然后回滚版本。

$ hadoop fs -lsr / > ~/namenode.log
$ hadoop fsck / >> ~/namenode.log
$ cp -r ${dfs.name.dir} ~/namenode_backup

3、使用stop-all.sh关闭hadoop集群。下载好1.0.3版本的程序进行配置,虽然conf里边多了几个新文件,但是不用管它,就按之前的配置就好,或者直接把老版本的conf里边的core、hdfs、mapred、master、slaves几个配置文件copy过来就行。别忘了配置下hadoop-env.sh,不确定这个是否有变化,还是手动配置JAVA_HOME好了。

4、把${dfs.name.dir}目录下的所有内容copy放入你新配置的路径下,这个是集群布局有变化的操作,如果没有新配置布局就不用这个操作了。单独启动新的主节点namenode的hdfs进行更新操作,命令如下:

$ ${NEW_HADOOP}/bin/start-dfs.sh -upgrade

使用如下命令进行监控,查看是否升级完成:

$ ${NEW_HADOOP}/bin/hadoop dfsadmin -upgradeProgress status

出现Upgrade for version -* has been completed.的提示即完成了升级。

5、把新版本的hadoop程序和配置文件一起分发给集群里所有的机器,根据情况看是不是需要进行个别修改,没有特别的就不用改了。修改/etc/profile中的hadoop环境变量,改成新的版本的hadoop的指向。现在使用启动集群的start-all.sh命令来启动集群就行了。

6、使用 fs -lsr 和fsck与namenode.log文件进行核对前后信息变化,如果没有问题,数据块体检也通过,那么就顺利升级完成了,这时候需要执行如下命令来最终确定升级完成和清理前版本数据:

$ hadoop dfsadmin -finalizeUpgrade
$ rm -r ~/namenode_backup ~/namenode.log

至此升级完成,不能再进行回滚操作,如果升级后发现数据不符,可以使用如下命令回滚版本:

$ stop-all.sh
$ start-dfs.sh -rollback

简单六步完成。so easy~麻麻又可以少担心一件事了。

可能出现的问题

这期间可能出现各种问题,详细的请查看hadoop的各个日志文件进行排查调试。这里详细说的一个问题就是,可能服务器本地库的一些程序版本过低,造成了一些错误,hadoop没有任何提示信息,但是在hadoop根目录下生成了类似hs_err_pid*.log的文件,这是java生成的错误文件,查看里边有类似这样的信息:

# A fatal error has been detected by the Java Runtime Environment:
#
# SIGFPE (0x8) at pc=0x0026950c, pid=30186, tid=3074190256
...
--------------- T H R E A D ---------------
Current thread (0x0805a800): JavaThread "main" [_thread_in_native, id=29049, stack(0xb7376000,0xb73c7000)]

siginfo:si_signo=SIGFPE: si_errno=0, si_code=1 (FPE_INTDIV), si_addr=0x0026950c

查看apache邮件列表的说法是:

this is a process error (JVM error), not program error. Check if your memory is working correctly (memtest).

说是内存有问题,(这你妹,这次坑爹了,不过也许这种错误也有内存出错造成的情况)。重新装了java,检查了机器的内存,发现都咩问题。而且配置的集群里只有两台出现这种情况,猜测可能是新版本的hadoop需要某些基础服务缺失或版本低了。然后找到了这篇这篇,和琥珀春秋帮助找到的这一篇。简单的来说,解决办法如下几个步骤:
1、下载安装ant,配置环境变量如:

export ANT_HOME=/opt/apache-ant-1.8.0
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$ANT_HOME/bin:$PATH

2、在hadoop根目录下执行命令:

$ source /etc/profile
$ ant compile-native

3、把生成的目录build里边的native/Linux*** 里边的内容整体移到hadoop根目录下,菊花符号代表可能根据各个服务器有所不同。

4、然后配置有问题的hadoop的core-site.xml添加如下属性:

<property>
<name>hadoop.native.lib</name>
<value>false</value>
</property>

5、关闭集群,重启集群。OK,搞定!

另外一种解决办法是升级服务器,正好我的集群升级是两台机器出现这样的情况,所以一台使用的是这个方法,另外一台就提交给运维还是什么的部门去升级服务器了,等结果。然后重新添加hadoop1.0.3试试是否还有这个问题。

个人原创,转载请注明:三江小渡

我猜你可能也喜欢:

3 Comments - Leave a comment
  1. 王锦阳说道:

    thanks!

  2. 王锦阳说道:

    大虾,我现在遇到版本问题需要升级了,我的Hadoop版本是0.20.2,想问一下你版本是不是都没有多大的关系?可不可以升级到1.0.4?还有你写的步骤是否完整?感激不尽!

Leave a comment

电子邮件地址不会被公开。 必填项已用*标注

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>


Welcome , today is 星期二, 2017 年 10 月 24 日