hadoop1.x升级2.6记录

现有版本:hadoop-1.1.2

升级版本:hadoop-2.6.0

hadoop官方地址

系统版本:CentOS release 6.7 (Final)

JDK版本:java version "1.7.0_21" 64-Bit


Maven版本:apache-maven-3.3.3

Ant版本:apache-ant-1.9.6

其他版本:findbugs-3.0.1    protobuf-2.5.0

使用上面的软件是为了编译hadoop 2.6.0 (因为一些本地包官方版本是无法检测到的,需要重新编译)

具体编译流程与软件下载请自行寻找

Maven命令  mvn package -DskipTests -Pdist,native –Dtar


编译后(hadoop-2.6)

先在1.x hadoop环境进行备份操作

shell>hadoop dfsadmin -safemode enter

进入安全模式

shell>hadoop dfsadmin -saveNamespace

进行Namespace备份

shell>hadoop dfsadmin -safemode leave

离开安全模式

停止整个1.x集群


1.x安装目录下的conf文件夹下

hdfs-site.xml这个文件里面的



这个参数用于确定将HDFS文件系统的元信息保存在什么目录下

要把这两个元数据都进行备份,这个备份非常重要,用于以后回滚或者提交

shell> cp -fr /download/hadoop/name1 /download/hadoop/name1.bak

shell> cp -fr /download/hadoop/name2 /download/hadoop/name2.bak

在这里把两个元数据都已经备份,大家有什么就备份什么,按照你们的配置来进行备份

自此hadoop1.x环境的备份与集群停止工作都已经结束,如果顺利这也是它最后一次服役

这时在/etc/profile的环境变量,该下线的都下线,但是暂时不要用hadoop2的命令来替换1的环境变量配置,不然容易造成一些未知错误(别忘了让环境变量生效:))

现在把1.x安装目录下conf文件夹里的配置文件全部拷贝到hadoop2.6配置目录下$HADOOP2_HOME/etc/hadoop/

升级启动时必须使用1.x的配置文件,一点都不要改动,hadoop2.x的HA、HA+Federation这些配置文件你可以先配置好,但是名字不能与1.x的配置文件名字相同,最好做成core-site.xml.2这种形式,以便区分

在hadoop2.6的sbin文件夹下执行如下命令

shell> ./hadoop-daemon.sh start namenode -upgrade

这时要看日志输出是否有错误,如果有错误就细致看错误,源码的准备也是有必要的,因为升级的文章很少,大家写的也都是成功流程,但是中间失败的过程与错误的分享较少,所以这需要你通过丰富的经验通过源码来解决错误问题

我在升级时遇到了一个错误

是因为我们公司hadoop的权限划分有些问题,错误我没记录,但是我通过源码找到了问题所在,在core-site.xml(1.x配置文件,2.6时也需要添加这个配置)添加了如下配置


这个是否需要,需要看执行上面的升级命令有无报错(而且要看具体错误)


如果启动无错误,命令执行结束,那么你的namenode已经升级完成了

这时要升级datanode,升级datanode较为简单,启动它就好了……(2.6环境sbin文件夹下)

shell> ./hadoop-daemons.sh start datanode

此时是否启动了全部datanode,取决于你的slaves配置也就是说从1.x拷贝到2.6 conf下的slaves这个文件,如果是跟1.x一致的主机群(注意没启动的节点不会进行升级),那么上面的命令已经启动了全部datanode节点,datanode会随着namenode去升级

此时如果全部启动后(自行确认namenode与datanode是否全部启动)

停止集群 (下面该替换2.6的配置文件操作了)


2.6环境sbin文件夹下

shell> ./stop-dfs.sh

将所有配置文件全部升级为2.6是否选择HA、HA+Federation请自行决定,相关配置请参照官方文档与网络文章

如果使用HA模式journalnode需要同步元数据(这里使用命令同步,不建议修改文件方式)

在2.6(namenode active节点)安装目录下的bin执行命令

shell> ./hdfs namenode –initializeSharedEdits

启动各个journalnode

这里我是在各个datanode下单独启动的,启动命令(2.6安装目录sbin目录下)

shell> ./hadoop-daemon.sh start journalnode

同步namenode元数据信息到HA节点 (2.6安装目录bin目录下)

shell> ./hdfs namenode -bootstrapStandby

启动namenode(namenode active节点)

shell> ./hadoop-daemon.sh start namenode

启动datanode(namenode active节点)

shell> ./hadoop-daemons.shstart datanode

全部启动后现在是没有active节点的

需要手动激活,命令如下(namenode active节点2.6安装目录bin目录下):

shell> ./hdfs haadmin -transitionToActive nn1

此时集群已经全部启动,第一次启动时datanode需要检查数据,速度较慢,需要一定耐心

升级完毕后,namenode和datanode的${dfs.data.dir}/目录下会多出一个文件夹previous/,这是升级之前数据的备份。

如果确定升级成功,可以使用(namenode active节点2.6安装目录bin目录下):hadoop dfsadmin -finalizeUpgrade(要在active的namenode上执行 可以在集群启动时使用该命令) 最终提交升级(最终升级后无法回滚请确认后再执行)

确认好升级后,可以把环境变量给修改为升级后的环境,方便使用各种命令


记录一点心得,欢迎大家交流mail:[email protected]

你可能感兴趣的:(hadoop1.x升级2.6记录)