自己的主机上的Hadoop版本是2.7.6,是测试用的伪分布式Hadoop,在前段时间部署了Hive on Spark,但由于没有做好功课,导致了Hive无法正常启动,原因在于Hive 3.x版本不适配Hadoop 2.x版本。之前我在学校服务器上部署的Hadoop版本是3.1.2,现打算将自己的从2.7.6升级到3.1.2版本,同时也当作练练手并记录以便以后参考。这是一个大版本跨度的升级操作,所以先参考Hadoop权威指南上的方案以及官方文档,然后拟定了升级和回滚方案。
根据官方文档所说:
”For non-HA clusters, it is impossible to upgrade HDFS without downtime since it requires restarting the namenodes. However, datanodes can still be upgraded in a rolling manner.“
也就是说对于非HA群集,由于需要重新启动名称节点,因此无法在没有停机的情况下升级HDFS。但是,仍可以回滚方式升级datanode。
注意:仅从Hadoop-2.4.0开始支持滚动升级。
Hadoop升级最主要是HDFS的升级,HDFS的升级是否成功,才是升级的关键,如果升级出现数据丢失,则其他升级就变得毫无意义。
解决方法:
- 备份HDFS的NameNode元数据,升级后,对比升级前后的文件信息。
- 单台升级DataNode,观察升级前后的Block数(有较小浮动范围,v2与v3的计数方式不一样)。
第一阶段 停机以及备份NameNode目录
通过命令stop-yarn.sh和stop-dfs.sh关闭HDFS集群:
# stop-yarn.sh # stop-dfs.sh
然后备份NameNode目录到NFS或者其他文件系统中,如果不记得NameNode目录存储的地址可以通过查看hdfs-site.xml文件的ÿ