现有版本: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]