Hadoop升级方案(二):从Hadoop 1.0升级到2.0(1)
来源:互联网 发布:剑网3插件数据 编辑:程序博客网 时间:2024/05/01 01:45
网址:http://dongxicheng.org/mapreduce-nextgen/hadoop-upgrade-to-version-2/
本博客的文章集合:http://dongxicheng.org/recommend/
2013年10月15日,Hadoop 2.0的第一个稳定版2.2.0发布,对于大部分公司而言,这是一个惊喜,因为Hadoop 2.0解决了Hadoop 1.0中存在的诸多问题,比如NameNode单点故障、NameNode内存制约HDFS扩展性、MapReduce支持的计算框架过于单一等问题,但同时也面临一个较为困难的问题:如果将公司正使用的线上Hadoop版本(可能是apache hadoop 1.x.x版本,也可能是cdh3等)升级到最新的2.x.x版本?本文则尝试回答这一问题。
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)升级到2.x.x。第一种情况的介绍可参考我的另一篇文章:“Hadoop升级方案(一):Hadoop 内部版本升级”。
1. 基础知识准备
由于Hadoop 2.0增加了很多新的特性,包括HDFS HA,HDFS Federation,新的资源管理系统YARN等,在部署Hadoop 2.0之前,你需要对这些特性有一个理论上的了解,推荐阅读以下资料:
(1)HDFS Federation设计动机与基本原理
(2)Hadoop 2.0中单点故障解决方案总结
(3)Hadoop YARN资料汇总
(4) Hadoop 2.2.0设计文档
2. Hadoop升级概述
在当前这个过渡时期,大部分公司目前采用的版本一般为apache 版本,比如apache hadoop 0.20.2、0.203.0、1.x.x等,或者cloudera的cdh3,比如cdh3u2,cdh3u3,cdh3u4等,那么,如何将这些版本升级到最新的hadoop版本呢,比如升级到apache hadoop 2.2.0或者cdh4。
在 “Hadoop升级方案(一):Hadoop 1.0内部版本升级”一文中我已经提到,Hadoop升级中最重要最关键的是HDFS的升级,而其他系统的升级,比如YARN、MapReduce等则容易得多。
Hadoop 1.0到2.0的基本过程如下:
步骤1:HDFS升级(最关键最核心的);
步骤2:MapReduce升级(MRv1->MRv2,新增一个资源管理系统YARN);
步骤3:HBase以及更上层系统的升级,这通常取决于具体情况,由于Hadoop 2.0启用了Protocol Buffers,无法兼容之前的RPC协议,因此,需根据具体说明文档选取兼容版本,比如HBase 0.96可以兼容最新版本2.2.0,版本兼容矩阵和升级流程可参考“Hadoop version support matrix”和 “HBase updating”。
3. HDFS升级过程介绍
Hadoop 2.x.x中的HDFS完全兼容Hadoop 1.x.x(配置文件无需进行任何修改,直接重用旧的即可),如果想完全按照兼容模式升级,则可以直接参考我的文章“Hadoop升级方案(一):Hadoop 1.0内部版本升级”。不过这种模式下无法使用HDFS的新特性,比如HA和Federation,则按照本节介绍的步骤操作。
HDFS的升级步骤可概括为:
步骤1:停掉HDFS,备份关键数据,包括元数据文件、配置文件;
步骤2:下载新版本Hadoop安装jar包,比如apache hadoop 2.2.0;
步骤3: 部署新版本jar包,替换配置文件,并修改配置文件(新版本增加了一些新的配置项);
步骤4: 执行HDFS提供的版本升级命令进行升级,查看升级进度,一旦发现问题,则进行回滚。
注意,HDFS的升级速度与HDFS中block数目相关,现在集群升级时,应为升级留出预估的时间窗口。
HDFS升级的详细步骤如下:
步骤1:停掉HDFS:bin/stop-dfs.sh
备份关键数据,包括:
(1) 元数据文件:具体位置由配置文件hdfs-site.xml中的属性“dfs.name.dir”指定,如果指定了多个目录,则每个目录下有一个元数据文件副本,应确认哪一个副本是当前正在使用且完成的元数据目录,并对该目录进行备份。
(2)配置文件:包括conf目录下的所有文件。
步骤2:下载最新稳定版的hadoop 2.x.x版本,可从http://www.apache.org/dyn/closer.cgi/hadoop/common/上选择一个镜像下载。每个可下载版本包括两个压缩包,一个是hadoop-{HADOOP_VERSION}-src.tar.gz,即Hadoop源代码;另一个是hadoop-{HADOOP_VERSION}.tar.gz,这个是hadoop 安装包。另外,apache的这个官网只给出了最新的稳定版,如果想查看所有Hadoop版本,可直接进入hadoop svn:http://svn.apache.org/repos/asf/hadoop/common/branches/。
注意,从这里下载的安装包中同时包含了HDFS和MRv2/YARN。
步骤3:部署新版Hadoop。
首先,部署jar包。可将新版Hadoop直接部署到旧版Hadoop同级目录下,具体的Hadoop部署目录我已经在“Hadoop升级方案(一):Hadoop 1.0内部版本升级”一文中进行了介绍,大家可参考以下。
接下来分几种情况讨论,分别是:仅使用HA,同时使用HA和federation和使用Client-side mount table三种情况,由于篇幅的限制,本文先介绍第一种情况,其他两种情况将在另外一篇文章中介绍。
“仅使用HA”是指整个集群只有一个对外可用的namenode,同时为这个namenode增加一个backup namenode以解决HDFS单点故障问题。注意,此时,backup namenode除了充当主namenode的热备外,还兼有secondary namenode的功能,因此,无需再重复部署secondary namenode。这种部署方式应是大部分中小型公司采用的架构。具体如下图所示:
在上图中,存在两个namenode,但只有一个对外提供服务,另外一个作为备用。为此,需修改客户端、namenode和datanode上的hdfs-site.xml。需要注意的是,hadoop 2.0中namenode支持federation,即可以有多个namenode同时对外提供服务,每个namenode分管一部分目录,为此引入了namenode命名空间的概念,即你可以将不同的namenode划分到不同命名空间中。
这里讨论的仍只有一个对外可用namenode的情况,所以只有一个命名空间,我们将之命名为“ns1”,它包含主备两个namenode:nn1和nn3,为此,我们可以进行如下配置:
<
property
>
<
name
>dfs.nameservices</
name
>
<
value
>ns1</
value
>
<
description
>提供服务的NS逻辑名称,与core-site.xml里的对应</
description
>
</
property
>
<
property
>
<
name
>dfs.ha.namenodes.ns1</
name
>
<
value
>nn1,nn3</
value
>
</
property
>
<
property
>
<
name
>dfs.namenode.rpc-address.ns1.nn1</
name
>
<
value
>host-nn1:9000</
value
>
</
property
>
<
property
>
<
name
>dfs.namenode.http-address.ns1.nn1</
name
>
<
value
>host-nn1:50070</
value
>
</
property
>
<
property
>
<
name
>dfs.namenode.rpc-address.ns1.nn3</
name
>
<
value
>host-nn3:9000</
value
>
</
property
>
<
property
>
<
name
>dfs.namenode.http-address.ns1.nn3</
name
>
<
value
>host-nn3:50070</
value
>
</
property
>
我们可以很容易从属性名中了解以上配置属性的含义,比如“dfs.namenode.rpc-address”是对外RPC Server的地址,“dfs.namenode.http-address”是HTTP 访问地址。
除了以上配置外,还需设置主备namenode的共享信息存放位置,可使用配置项“dfs.namenode.shared.edits.dir”指定。目前有两种成熟的共享存储系统可供选择,一个是NFS,另外一个是QJM。
如果采用NFS,则配置方式如下:
<
property
>
<
name
>dfs.namenode.shared.edits.dir</
name
>
<
value
>file:///mnt/filer1/dfs/ha-name-dir-shared</
value
>
<
description
>指定用于HA存放edits的共享存储,通常是NFS挂载点</
description
>
</
property
>
如果采用QJM,则配置方式如下:
<
property
>
<
name
>dfs.namenode.shared.edits.dir</
name
>
<
value
>qjournal://node1.example.com:8485;node2.example.com:8485;node3.example.com:8485/mycluster</
value
>
</
property
>
其中,node1.example.com:8485,node2.example.com:8485和node3.example.com:8485是三个JournalNode的启动位置,注意,JournalNode数目最好为奇数个,一般3个足够。
如何启动JournalNode:
在JournalNode的各个节点上部署一份Hadoop代码,在hdfs-site.xml中添加以下配置,设置数据存放目录(注意,只能配置一个目录):
<
property
>
<
name
>dfs.journalnode.edits.dir</
name
>
<
value
>/path/to/journal/node/local/data</
value
>
</
property
>
然后执行“hdfs-daemon.sh journalnode”,启动JournalNode服务。
另外,为了访问HDFS方便,你需要在各个节点上的core-site.xml中设置默认目录前缀:
<
property
>
<
name
>fs.defaultFS</
name
>
<
value
>hdfs://ns1</
value
>
</
property
>
到此为止,我们配置的HA的namenode是不能够自动切换的,需要由管理员使用“bin/hadoop dfsadmin”命令人工切换,通常用户namenode在线升级等。为了支持namenode出现故障时自动切换,你需要配置zookeeper,具体如下:
<
property
>
<
name
>ha.zookeeper.quorum</
name
>
<
value
>zk1:2181,zk2:2181,zk3:2181,</
value
>
<
description
>指定用于HA的ZooKeeper集群机器列表</
description
>
</
property
>
<
property
>
<
name
>dfs.ha.automatic-failover.enabled</
name
>
<
value
>true</
value
>
</
property
>
其中,zk1、zk2和zk3是你已经配置好的zookeeper实例,对于zookeeper的部署和搭建,不再本文讨论范畴。
上面只是基础的配置,除了这些以外,你还需要配置datanode数据存放位置,副本数等信息,这些参数与Hadoop 1.0一样(hadoop2.0对部分参数进行了重命名,但是仍然兼容1.0中的参数),你可以按照hadoop 1.0的配置方法设置。
经过上面的配置,你可以进入升级阶段。
步骤4:执行HDFS升级命令。
整个升级过程跟我在文章“Hadoop升级方案(一):Hadoop 1.0内部版本升级”介绍的升级过程基本一致。
在主namenode上执行以下命令进行升级:
(1)启动namenode:
bin/hdfs 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/hadoop dfsadmin –finalizeUpgrade 最终提交升级
注意,输入该命令后,备份数据previous/会自动被删除,之后不能再进行回滚。
如果升级过程中出现错误,则需要回滚,回滚步骤如下:
步骤1:停掉当前Hadoop:bin/stop-all.sh
步骤2:重新部署之前版本
步骤3:回滚:bin/start-dfs.sh –rollback
4. MapReduce升级过程
在Hadoop 2.0中,MapReduce应用程序直接运行在新的资源管理系统YARN上,这意味着,我们只需部署YARN,而MapReduce应用程序相关逻辑以便变成了一个客户端的编程库,无需单独部署或者显式地升级MapReduce。
在上面介绍的HDFS升级过程中,我们已经将YARN的代码部署(与HDFS放在一起)完毕,只需修改mapred-site.xml和yarn-site.xml两个配置文件,然后启动ResourceManager,NodeManager等服务即可,具体可参考我的这篇文章:http://dongxicheng.org/mapreduce-nextgen/hadoop-yarn-install/。
由于MRv2完全兼容MRv1的应用程序,这样,启动YARN之后,你可以直接向YARN提交之前编写的MapReduce程序,无需进行任何修改。
5. 问题讨论
(1)我们配置了主备两个namenode,如何确定指定哪个是主,哪个是备呢?
答:不支持显式的指定,HDFS会将第一个启动的namenode作为主namenode。
(2)是否可以配置多于2个的备用namenode?
答:目前仅支持主备两个namenode,也就是说,只有一个备用namenode,不支持更多的备用namenode
(3)主备namenode之间的共享存储能够有多个?
答:目前仅支持一个。
【另一篇网友写hadoop升级文章是“从Hadoop1.x集群升级到Hadoop2.x步骤”,推荐阅读。】
原创文章,转载请注明: 转载自董的博客
本文链接地址: http://dongxicheng.org/mapreduce-nextgen/hadoop-upgrade-to-version-2/
作者:Dong,作者介绍:http://dongxicheng.org/about/
本博客的文章集合:http://dongxicheng.org/recommend/
- Hadoop升级方案(二):从Hadoop 1.0升级到2.0(1)
- hadoop升级到1.0
- Hadoop升级方案
- 从Hadoop 1.x升级到Yarn
- Hadoop HDFS 升级到2.0 笔记
- Hadoop升级(HA) 2.2升级到2.6
- hadoop升级
- hadoop 升级
- Bugfree升级(从2.0升级到3.0.4)
- Hadoop 1.2.1 伪分布升级到 2.6.0伪分布(八)
- Mapr升级方案(二)——离线升级
- hadoop 0.20.2版本升级到1.0.3 记录
- Hadoop升级步骤cdh3u3到cdh3u6
- 【PSU升级】Oracle_RAC10.2.0.1到10.2.0.5.9的详细升级过程(二)
- Hadoop如何升级版本_Hadoop1.x升级到2.x
- Hadoop升级(No HA) 2.2升级到2.6
- Hadoop升级(HA+Federation) 2.2升级到2.6
- (升级版)Spark从入门到精通(Scala编程、案例实战、高级特性、Spark内核源码剖析、Hadoop高端)
- ssh自动认证
- spring jdbcTemplate连接数据库
- POJ 2718
- Chrome 控制台console的用法
- 接木棍(优先队列)
- Hadoop升级方案(二):从Hadoop 1.0升级到2.0(1)
- RS485接口标准、硬件电路
- hadoop2升级的那点事情(详解)
- RS422接口标准、硬件电路
- hadoop2.7.0升级到2.7.1,版本升级
- Leetcode Sudoku Solver9
- hdoj1237简单计算器
- STL中map的operator[ ]使用方法
- Flash芯片的种类与区别