Hadoop升级方案(一):Hadoop 1.0内部版本升级(初稿)
网址: http://dongxicheng.org/mapreduce-nextgen/hadoop-upgrade-in-version-1/
本博客的文章集合: http://dongxicheng.org/recommend/
重大消息:我的Hadoop新书《Hadoop技术内幕:深入解析MapReduce架构设计与实现原理》已经开始在各大网站销售了,购书链接地址: 当当购书网址, 京东购书网址, 卓越购书网址。新书官方宣传主页: http://hadoop123.com/。
一般而言,Hadoop版本升级通常分为以下几种情况:
(1)Hadoop 1.x.x版本(或者更低版本,比如0.20.2)内部升级。分为两类,第一类是,同一个发行版内部版本间升级,比如从apache hadoop 0.20.2升级到apache hadoop 1.0.2,从cdh3u2升级到cdh3u6;第二类是,不同发行版之间的版本升级,比如从apache hadoop 0.20.2升级到cdh3u3。
(2)Hadoop 1.x.x(或者更低版本,比如0.20.2)升级到2.x.x。分为两类,第一类是,同一个发行版内部版本间升级, 比如从apache hadoop 1.1.2升级到apache hadoop 2.2.0,或者从cdh3u2升级到cdh4.4.0;第二类是,不同发行版之间的版本升级,从cdh3u3升级到apache hadoop 2.2.0。
(3)Hadoop 2.x.x内部版本升级,与(1)类似。
本文将介绍第一种情况,即如何进行Hadoop 1.x.x版本(或者更低版本,比如0.20.2)内部升级。如果你已经确定要从hadoop 1.0升级到2.0,可参考我的文章“Hadoop升级方案(二):从Hadoop 1.0升级到2.0(初稿)”(尚未完成)进行升级。为了便于说明,本文以apache hadoop 0.20.2升级到cdh-0.20.2-3u2为例进行介绍,其他版本间升级类似。
在正式介绍之前,你需要先了解以下基础知识:
(1)apache发行版和cloudera发行版的各版本含义、特点及包含的特性,具体可阅读我的这篇文章: “Hadoop版本选择探讨”;
(2)apache 1.x.x(或者更低版本,比如0.20.2)中各版本的特点以及包含的特性,可阅读我写的Hadoop书 《Hadoop技术内幕:深入解析MapReduce架构设计与实现原理》中的第二章了解详情。
Hadoop 1.0内部版本升级时的最重要的系统是HDFS,HDFS关系到整个Hadoop集群中数据的完整性,一旦升级过程中出现HDFS数据丢失或者损坏,其他系统的升级,比如MapReduce、HBase等,变得没有了意义。从一定程度上说,Hadoop内部版本的升级实际上就是HDFS的升级,其他软件只需替换jar包重启即可(大部分是这样的,个别特例除外),没有太多复杂的操作。
就目前而言,大部分公司仍然采用的Hadoop 1.0版本,比如hadoop 0.20.2、hadoop 1.1.2或者cdh3u6等,但考虑到hadoop 2.0的第一个稳定版2.2.0已经率先由apache发布,因此可能大部分公司会考虑直接将1.0版本升级到2.0版本,而不是在1.0内部升级。但是,个人觉得是否升级到2.0,需考虑以下问题:你是不是真的需要2.0里面的功能?2.0更加强大,但带来更大的维护成本,你们是否具备这样的能力驾驭2.0?2.0中比较好的重大特性如下:
(1)NameNode单点故障问题得到解决,具体可阅读我的这篇文章“ Hadoop 2.0中单点故障解决方案总结”;
(2)NameNode内存受限问题得到解决,具体可阅读我的这篇文章“ HDFS小文件及解决方案”;
(3)可支持多类框架运行在一个集群中,比如 MapReduce、 Tez、 Storm、Spark等,具体可阅读我的这篇文章 “运行在YARN上的计算框架”。
1. 准备工作
正式开始进行升级(apache hadoop 0.20.2升级到cdh-0.20.2-3u2)操作之前,需进行一些准备工作,具体如下:
(1)准备hadoop-0.20.2-cdh3u2 jar包(下载地址可查看我的这篇文章 “Hadoop版本选择探讨”)
(2)备份好namenode元数据文件(在集群关闭的状态下进行),即edits和fsimage,比如:
在namenode所在节点上,查看你的元数据文件存放位置:
$ grep -C1 dfs.name.dir /etc/hadoop/conf/hdfs-site.xml
<property>
<name>dfs.name.dir</name>
<value>/mnt/hadoop/hdfs/name</value>
</property>
然后备份该目录下的文件:
$ cd /mnt/hadoop/hdfs/name
# tar -cvf /root/nn_backup_data.tar .
(3)备份所有配置文件(比如core-site.xml、mapred-site.xml、hdfs-site.xml等)
2. hadoop升级
步骤1:停掉Apache Hadoop 0.20.2的基础服务:bin/stop-all.sh;停掉Hadoop上层的服务,比如HBase、Hive等;
步骤2:部署Hadoop- 0.20.2-CDH3u2,注意,前一版本的所有文件均不能重用,要完全替换:,配置文件可直接重用前一版本的。一般的做法是,将该版本单独放到一个目录下,并将前一版本的配置文件替换到新版本对应目录下;
步骤3:启动新版本hadoop:
(1)启动namenode:
bin/hadoop-daemon.sh start namenode -upgrade
(2)启动HDFS:
bin/start-dfs.sh
【注】上述两个步骤也可以合并成:
bin/start-dfs.sh –upgrade
可使用命令:
bin/hadoop dfsadmin -upgradeProgress status
查看升级进度
也可以通过查看namenode和datanode日志判断升级是否完毕。
【注】升级完毕后,namenode和datanode的${ dfs.data.dir}/目录下会多出一个文件夹previous/,这是升级之前数据的备份。
如果确定升级成功,可以使用以下命令最终提交升级:
bin/hadoopdfsadmin–finalizeUpgrade
注意,输入该命令后,备份数据previous/会自动被删除,之后不能再进行回滚。
如果升级过程中出现错误,则需要回滚,回滚步骤如下:
步骤1:停掉当前Hadoop(Hadoop- 0.20.2-CDH3u2):
bin/stop-all.sh
步骤2:重新部署之前版本Apache Hadoop 0.20.2
步骤3:回滚:
bin/start-dfs.sh -rollback
(3)启动MapReduce以及上层服务:
bin/start-mapred.sh
注意,通常而言,HBase能够兼容下面的HDFS,无需一起升级,特殊版本除外。
3. 建议Hadoop目录部署方式
对外提供统一目录hadoop,建议采用软连接来回切换不同版本的Hadoop,升级之前,hadoop指向旧版本Hadoop:
ln –s hadoop_versions/hadoop-0.20.2-cdh hadoop
升级时,让hadoop指向新版本Hadoop:
ln –s hadoop_versions/hadoop-0.20.2 hadoop
配置文件路径可也采用类似方法。
这样,HADOOP_HOME值对外的透明的,升级前后不变。
4. 升级速度优化
HDFS升级的快慢取决于集群中block的多少,而HDFS的升级时间主要花在为block文件建立硬链接上,具体优化方法可参考我的这篇文章:“ Hadoop 升级创建硬链接效率优化”。
5. 总结
Hadoop升级成败的关键是数据存储系统HDFS的升级成功,其他系统只需简单替换jar包重启就行。为了确保升级万无一失,一定要现在测试集群上进行升级预演,然后再对线上集群升级。为了防止线上Hadoop升级时出现重大故障,一定要对重要的元数据信息进行备份,并制定规范的回滚策略。
原创文章,转载请注明: 转载自 董的博客
本文链接地址: http://dongxicheng.org/mapreduce-nextgen/hadoop-upgrade-in-version-1/
作者: Dong,作者介绍: http://dongxicheng.org/about/
本博客的文章集合: http://dongxicheng.org/recommend/
Copyright © 2013
This feed is for personal, non-commercial use only.
The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:
)