Hadoop升级方案(一):Hadoop 1.0内部版本升级(初稿)

标签: 下一代MapReduce(YARN) Hadoop 1.0 Hadoop升级 | 发表时间:2013-10-22 07:33 | 作者:Dong
出处:http://dongxicheng.org
作者: Dong | 新浪微博: 西成懂 | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及 版权声明
网址: 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)可支持多类框架运行在一个集群中,比如 MapReduceTezStorm、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:
)

相关 [hadoop 升级 hadoop] 推荐:

Hadoop升级方案(一):Hadoop 1.0内部版本升级(初稿)

- - 董的博客
Dong | 新浪微博: 西成懂 | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及 版权声明. 网址: http://dongxicheng.org/mapreduce-nextgen/hadoop-upgrade-in-version-1/. 本博客的文章集合: http://dongxicheng.org/recommend/.

Hadoop升级方案(二):从Hadoop 1.0升级到2.0(2)

- - 董的博客
Dong | 新浪微博: 西成懂 | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及 版权声明. 网址: http://dongxicheng.org/mapreduce-nextgen/hadoop-upgrade-to-version-2-2/. 本博客的文章集合: http://dongxicheng.org/recommend/.

Hadoop Streaming 编程

- - 学着站在巨人的肩膀上
Hadoop Streaming是Hadoop提供的一个编程工具,它允许用户使用任何可执行文件或者脚本文件作为Mapper和Reducer,例如:. 采用shell脚本语言中的一些命令作为mapper和reducer(cat作为mapper,wc作为reducer). 本文安排如下,第二节介绍Hadoop Streaming的原理,第三节介绍Hadoop Streaming的使用方法,第四节介绍Hadoop Streaming的程序编写方法,在这一节中,用C++、C、shell脚本 和python实现了WordCount作业,第五节总结了常见的问题.

Hadoop使用(一)

- Pei - 博客园-首页原创精华区
Hadoop使用主/从(Master/Slave)架构,主要角色有NameNode,DataNode,secondary NameNode,JobTracker,TaskTracker组成. 其中NameNode,secondary NameNode,JobTracker运行在Master节点上,DataNode和TaskTracker运行在Slave节点上.

Hadoop MapReduce技巧

- - 简单文本
我在使用Hadoop编写MapReduce程序时,遇到了一些问题,通过在Google上查询资料,并结合自己对Hadoop的理解,逐一解决了这些问题. Hadoop对MapReduce中Key与Value的类型是有要求的,简单说来,这些类型必须支持Hadoop的序列化. 为了提高序列化的性能,Hadoop还为Java中常见的基本类型提供了相应地支持序列化的类型,如IntWritable,LongWritable,并为String类型提供了Text类型.

Hadoop TaskScheduler浅析

- - kouu&#39;s home
TaskScheduler,顾名思义,就是MapReduce中的任务调度器. 在MapReduce中,JobTracker接收JobClient提交的Job,将它们按InputFormat的划分以及其他相关配置,生成若干个Map和Reduce任务. 然后,当一个TaskTracker通过心跳告知JobTracker自己还有空闲的任务Slot时,JobTracker就会向其分派任务.

HADOOP安装

- - OracleDBA Blog---三少个人自留地
最近有时间看看hadoop的一些东西,而且在测试的环境上做了一些搭建的工作. 首先,安装前需要做一些准备工作. 使用一台pcserver作为测试服务器,同时使用Oracle VM VirtualBox来作为虚拟机的服务器. 新建了三个虚拟机以后,安装linux,我安装的linux的版本是redhat linux 5.4 x64版本.

Hadoop Corona介绍

- - 董的博客
Dong | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及 版权声明. 网址: http://dongxicheng.org/hadoop-corona/hadoop-corona/. Hadoop Corona是facebook开源的下一代MapReduce框架. 其基本设计动机和Apache的YARN一致,在此不再重复,读者可参考我的这篇文章 “下一代Apache Hadoop MapReduce框架的架构”.

Hadoop RPC机制

- - 企业架构 - ITeye博客
RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议. Hadoop底层的交互都是通过 rpc进行的. 例如:datanode和namenode 、tasktracker和jobtracker、secondary namenode和namenode之间的通信都是通过rpc实现的.

Hadoop Rumen介绍

- - 董的博客
Dong | 新浪微博: 西成懂 | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及 版权声明. 网址: http://dongxicheng.org/mapreduce/hadoop-rumen-introduction/. 什么是Hadoop Rumen?. Hadoop Rumen是为Hadoop MapReduce设计的日志解析和分析工具,它能够将JobHistory 日志解析成有意义的数据并格式化存储.