目录

第一阶段 停机以及备份NameNode,zk目录

第二阶段 在集群上安装新版本的Hadoop

第三阶段 准备滚动升级

1. 准备滚动升级

2. 升级active和standby NN

3. 升级DN

5.提交完成滚动升级

升级中可能遇到的问题记录:

参考地址


说明:

      1.本人准备升级的旧版hadoop2.6.0-cdh安装目录:/data/br/base/hadoop/

      2.新版hadoop3.1.3安装目录:/data/br/base/hadoop-3.1.3/  或

新版hadoop2.10.0安装目录:/data/br/base/hadoop-2.10.0/                     

      3.滚动升级完hdfs后,建议修改旧版hadoop目录,新版hadoop安装目录改成原来旧版目录,即/data/br/base/hadoop/

      4.hadoop滚动升级主要针对的是namenode,datanode进程.

第一阶段 停机以及备份NameNodezk目录

备份元数据目录,是防止万一使用hadoop命令升级过程出现未知异常情况或操作失误,升级失败且不能通过命令回滚时,可以重新使用原来数据目录。

  1. 停机

# stop-yarn.sh

# stop-dfs.sh

  1. 备份jn,nn,zk目录

第二阶段 在集群上安装新版本的Hadoop

下载Hadoop 3.1.3后解压,最好移除PATH环境变量下的Hadoop脚本,这样的话,就不会混淆针对不同版本的脚本。将HADOOP_HOME指向新的Hadoop:

export HADOOP_HOME=/data/br/base/hadoop-3.1.3

并使/etc/profile文件生效:source /etc/profile

  1. 新版hadoop配置hadoop-env.sh中指定JAVA_HOME

hadoop 升级 hadoop2升级hadoop3_hadoop 升级

  1. 确保新版hadoop的${HADOOP_HOME}/etc/hadoop/hdfs-site.xml中的dfs.namenode.name.dir和dfs.datanode.data.dir属性的值分别为Hadoop 2.6.0的hdfs-site.xml的dfs.namenode.name.dir和dfs.datanode.data.dir属性的值。或者直接使用原版本的hadoop配置文件:core-site.xml、hdfs-site.xml,mapred-site.xml,yarn-site.xml替换新版hadoop配置目录下。

注意:HADOOP_HOME指定成新版hadoop目录后,请检查配置文件中是否有需要修改目录:

如yarn-site.xml中指定的hadoop目录需要修改成指定新版hadoop目录

hadoop 升级 hadoop2升级hadoop3_hadoop_02

  1. 新版本hadoop3.1.3配置datanode节点为works配置文件指定(hadoop2.6.0中为slaves文件)

    直接将2.6.0中slaves内容复制到3.1.3中的works即可。

配置完成,分发到每台机器上,保证集群中每台机器都有配置hadoop-3.1.3

注意:新版hadoop命令有变化,如下

第三阶段 准备滚动升级

先启动旧版本的Hadoop:

# /data/br/base/hadoop/sbin/start-dfs.sh

1. 准备滚动升级

假设有两个namenode  NN1NN2其中NN1NN2分别处于活动和备用状态。以下是升级HA群集的步骤:

  1. 准备滚动升级
  1. 运行“ hdfs dfsadmin -rollingUpgrade prepare ”以创建用于回滚的fsimage。

hadoop 升级 hadoop2升级hadoop3_hadoop 升级_03

             2.运行“ hdfs dfsadmin -rollingUpgrade query ”以检查回滚映像的状态。等待并重新运行命令,直到显示“ Proceeding with Rolling Upgrade ”消息。

hadoop 升级 hadoop2升级hadoop3_hdfs_04

2. 升级activestandby NN

  1. 关闭并升级standby NN2

旧版standby关闭:/data/br/base/hadoop/sbin/hadoop-daemon.sh stop namenode

hadoop 升级 hadoop2升级hadoop3_hdfs_05

     2.开始NN2 standby“ -rollingUpgrade started ”选项。

新版standby启动:

$HADOOP_HOME/bin/hdfs --daemon start namenode -rollingUpgrade started  (3.x版本命令)

或者

$HADOOP_HOME/sbin/hadoop-daemon.sh start namenode -rollingUpgrade started  (2.x版本命令)

观察新版standby NN2 web页面:

hadoop 升级 hadoop2升级hadoop3_运维_06

      3.从NN1NN2的故障转移,以便NN2变为active状态,而NN1变为standby状态。

切换旧版active,使上一个新版的standby为active:

旧版NN1停止:/data/br/base/hadoop/sbin/hadoop-daemon.sh stop namenode

hadoop 升级 hadoop2升级hadoop3_运维_07

      4.开始NN1与待机“ -rollingUpgrade开始 ”选项。

观察新版的standby NN2为active后,NN1上启动新版standby:

新版standby:

$HADOOP_HOME/bin/hdfs --daemon start namenode -rollingUpgrade started (3.x版本命令)

或者

$HADOOP_HOME/sbin/hadoop-daemon.sh start namenode -rollingUpgrade started  (2.x版本命令)

hadoop 升级 hadoop2升级hadoop3_hdfs_08

以上namenode进程升级为新版运行完毕,接下来滚动升级DN进程:

3. 升级DN

1.关闭旧版进程

/data/br/base/hadoop/sbin/hadoop-daemon.sh stop datanode

2.启动新版进程

$HADOOP_HOME/bin/hdfs --daemon start datanode (3.x版本启动命令)

或者

$HADOOP_HOME/sbin/hadoop-daemon.sh start datanode (2.x版本命令)

hadoop 升级 hadoop2升级hadoop3_hadoop_09

重复上述步骤,直到升级群集中的所有数据节点。

  1. 验证新版hadoop功能
  2. 检查namenode web:

hadoop 升级 hadoop2升级hadoop3_hadoop_10

hadoop 升级 hadoop2升级hadoop3_hadoop_11

验证hdfs进程正常后。

  1. 启动yarn,验证Yarn web:

start-yarn.sh

yarn-daemon.sh start resourcemanager

hadoop 升级 hadoop2升级hadoop3_hadoop 升级_12

  1. 验证新版hadoop功能是否正常:

  验证yarn是否正常:使用hadoop自带wordcount例子提交运行,并查看是否成功。

若进程均正常则继续替换druid依赖hadoop的旧版配置文件,改为新版配置文件,即core-site.xml,hdfs-site.xml,mapred-site.xml,yarn-site.xml。

重启druid,zeus,查询历史数据及重新摄取数据,验证兼容性:

  1. 是否能正常查询druid中原有历史数据
  2. 发送新数据到druid,并过1小时后,coordinator页面是否生成segment,是否可以查询。
  3. Zeus提交rollup job,验证druid与mapreduce是否兼容。

5.提交完成滚动升级

若验证新版hadoop功能ok,则运行“ hdfs dfsadmin -rollingUpgrade finalize ”完成滚动升级。

/data/br/base/hadoop/bin/hdfs dfsadmin -rollingUpgrade finalize

hadoop 升级 hadoop2升级hadoop3_旧版_13

若升级失败或验证新版hadoop功能存在其他问题,想回滚到之前版本,可以进行如下回滚操作,以回到回滚之前的状态。

回滚

回滚将软件还原到升级前的版本,但也将用户数据还原到升级前的状态。假设时间T为滚动升级开始时间,并且升级通过回滚终止。T之前创建的文件在HDFS中仍然可用,但是T之后创建的文件不可用。在T之前删除的文件在HDFS中仍然被删除,但是在T之后删除的文件被恢复。

始终支持从较新版本回滚到升级前版本。但是,这不能以滚动方式完成。它需要集群停机。假设NN1NN2分别处于活动状态和待机状态。以下是回滚的步骤:

  • 回滚HDFS

              1.关闭所有新版NNDN

hadoop-daemon.sh stop namenode

hadoop-daemon.sh stop datanode

               2.在所有计算机上还原升级前的版本。

修改环境变量HADOOP_HOME重新指向旧版,并使之生效。

               3.开始NN1为活动的“ -rollingUpgraderollback ”选项。

执行旧版hadoop目录中命令:

hadoop 升级 hadoop2升级hadoop3_旧版_14

hadoop 升级 hadoop2升级hadoop3_hadoop 升级_15

              4.在NN2上运行`-bootstrapStandby'并以standby状态正常启动。

./bin/hdfs namenode -bootstrapStandby

hadoop 升级 hadoop2升级hadoop3_旧版_16

./sbin/hadoop-daemon.sh start namenode

hadoop 升级 hadoop2升级hadoop3_hadoop_17

hadoop 升级 hadoop2升级hadoop3_hdfs_18

                   5.使用“ -rollback ”选项启动所有DN

./sbin/hadoop-daemon.sh start datanode -rollback

hadoop 升级 hadoop2升级hadoop3_hdfs_19

完成回滚操作。

升级中可能遇到的问题记录

1.升级新版后,start-dfs.sh,发现有一台namenode进程挂掉:namenode日志报错:

hadoop 升级 hadoop2升级hadoop3_旧版_20

,则执行hdfs dfsadmin -refreshNodes  刷新datanode列表信息。

参考地址

https://hadoop.apache.org/docs/r3.1.3/hadoop-project-dist/hadoop-hdfs/HdfsRollingUpgrade.html

https://hadoop.apache.org/docs/r2.10.0/hadoop-project-dist/hadoop-hdfs/HdfsRollingUpgrade.html

说明:1.本人准备升级的旧版hadoop2.6.0-cdh安装目录:/data/br/base/hadoop/

2.新版hadoop3.1.3安装目录:/data/br/base/hadoop-3.1.3/  或

新版hadoop2.10.0安装目录:/data/br/base/hadoop-2.10.0/                     

      3.滚动升级完hdfs后,建议修改旧版hadoop目录,新版hadoop安装目录改成原来旧版目录,即/data/br/base/hadoop/

      4.hadoop滚动升级主要针对的是namenode,datanode进程,