低版本升级到hadoop2

本文参考了博客:http://blog.csdn.net/baiyangfu_love/article/details/13304625,对一些地方做了修改

HDFS升级,是hadoop集群升级到2.0的关键,而hdfs升级,最重要的是namenode的升级。

首先声明:在 HA 模式下,namenode是不能升级的!
2013-10-25 16:28:24,669 FATAL org.apache.hadoop.hdfs.server.namenode.NameNode: Exception in namenode join
org.apache.hadoop.HadoopIllegalArgumentException: Invalid startup option. Cannot perform DFS upgrade with HA enabled
先使用非ha模式将namenode的元数据升级:
step 1: 做下saveNamespace操作,停掉集群,并备份下 HDFS 的 Metadata,操作如下:
     1.1 让namenode进入safe mode状态
         $ bin/hadoop dfsadmin -safemode enter
     1.2 执行saveNamespace操作
      $ bin/hadoop dfsadmin -saveNamespace
     1.3 离开安全模式
      $ bin/hadoop dfsadmin -safemode leave
     1.4 stop 集群 
     1.5 备份 dfs.name.dir 下面的元数据
step2:
     2.1 将集群环境换成2.0(注意:不需要将配置文件改成2版本的,否则会报上边列出的错误),执行如下升级namenode命令:       
      hadoop-daemon.sh start namenode -upgrade 
step3:
     namenode升级完成后,将datanode启动,datanode会自动升级到与namenode相同版本
     3.1 关闭集群
     3.2 将配置文件升级为2的配置
     3.3 将升级完的namenode元数据一些参数修改一下,改成ha模式:
      这时需要将journalnode的元文件的VERSION文件的参数修改,改成与namenode的元数据相同或者使用命令:
    先启动 journalnode:sbin/hadoop-daemon.sh start journalnode
    给namenode安装journalnode共享目录bin/hdfs namenode -initializeSharedEdits
      启动namenode:sbin/hadoop-daemon.sh start namenode 
      启动datanode:sbin/hadoop-daemon.sh start datanode
     3.4 将active namenode的 {dfs.namenode.name.dir} 目录的内容复制到 standby namenode的{dfs.namenode.name.dir} 目录下然后启动 standby namenode
      或者使用命令:在standby namenode下执行bin/hdfs namenode -bootstrapStandby   作用与直接拷贝元数据类似

     3.5 格式化ZK(在hadoop01上执行即可):bin/hdfs zkfc -formatZK

     3.6 重新启动hdfs:sbin/start-dfs.sh(一定要重新启动,否则会出现两个namenode同时都是standby的状态)

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

如果确定升级成功,可以使用:bin/hadoop dfsadmin -finalizeUpgrade(要在active的namenode上执行) 最终提交升级

相关文章
相关标签/搜索