hdfs 升级,cdh3 升级 cdh4
Step 1: 备份下 HDFS 的 Metadata
即备份 dfs.name.dir 下面的元数据
?
Step 2: 下载 CDH4,把CDH3的配置拷过来
注意CDH3配置文件是在conf目录下面,CDH4的配置文件目录已经改成了etc/hadoop目录
?
Step 3: 升级 HDFS Metadata
3.1 进入CDH4目录下执行:?
sbin/hadoop-daemon.sh start namenode -upgrade -clusterid mycluster-test
说明mycluster-test是clusterid,可以指定,也可以不指定,如果不指定那么系统会自动生成一个
3.2 查看日志目录下的namenode日志,如果出现:
Upgrade of ${dfs.namenode.name.dir} is complete
说明元数据已经升级成功
3.3 启动DataNodes:
在每一台datanode上面启动datanode服务
sbin/hadoop-daemons.sh start datanode
datanode节点会自动升级
3.4 等待namenode退出安全模式,然后执行fsck
bin/hdfs fsck /
3.5 确认目录健康,没有block丢失后可以执行finalzeUpgrade及启动secondarynamenode
bin/hdfs dfsadmin -finalizeUpgrade
#finalized后将不能rollback
sbin/hadoop-daemon.sh start secondarynamenode
#请清理掉dfs.namenode.checkpoint.dir目录下老版本文件,否则会启动失败
?
回滚操作:
若在升级过程中出了问题,想回滚到cdh3版本,一定不能执行bin/hdfs dfsadmin -finalizeUpgrade。在执行finalizeUpgrade之前都可以回滚
?
在cdh3 版本下面执行
(1)回滚Namenode
bin/hadoop-daemon.sh start namenode -rollback
(2)回滚DataNode
bin/hadoop-daemon.sh start datanode -rollback
?
也可以手工操作,把数据move回来,然后正常启动
(1)回滚Namenode的数据
remove dfs.name.dir/current目录,mv dfs.name.dir/previous dfs.name.dir/current目录
这样子就恢复回namenode的元数据了
(2)回滚DataNode的数据
remove dfs.data.dir/current目录,mv dfs.data.dir/previous dfs.data.dir/current目录
这样子就恢复回datanode的数据了
操作完后就可以重新启动cdh3版本了
?
?
总的来说,升级是:mv?current?previous,创建current,读旧的元数据,写成新版本到current里面,而DataNode节点上面的block数据通过hardlink来放到current目录下面
? ? ? ? ? ? ? ? ?回滚是:rm current,mv previous current
?
?
?
?