hadoop hdfs 滚动升级

本文固定链接:https://www.askmaclean.com/archives/hadoop-hdfs-rolling-upgrade.html

原文地址:http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsRollingUpgrade.html#namenode_-rollingUpgrade

 

1介绍

HDFS 滚动升级允许对单独的HDFS进程升级。例如,datanodes可以被单独的升级而不依赖Namenodes。一个namenode可以被升级而不依赖其他的namenodes。Namenodes可以被升级而不依赖datanodes和journal 节点

2升级

在 hadoop v2,HDFS支持高可用的namenode服务和写兼用。这些功能可以让HDFS再升级的时候不需要停机、为了使HDFS集群无停机时间,集群必须设置为HA

如果在任何新版本中启用了任何新特性,升级后可能无法在旧版本上使用。在这种情况下(www.askmaclean.com),升级应遵循下列步骤:

1.禁用新功能

2.升级集群

3.启用新功能

注意:滚动升级只能从hadoop-2.4.0之后

2.1 无停机时间升级

在一个HA集群,有2个或者更多的NameNodes(NNs),一些journalNodes(JNS)和一些ZookeeperNodes(ZKNS)。在大部分情况下,当升级HDFS时,Jns是相对稳定的,不需要进行升级。在这里描述的滚动升级,只针对NNs和DNs,不考虑JNs和ZKNs。升级Jns和ZKNs可能导致集群停止。

 

升级非联合集群:

假设这里有2个namenodes NN1和NN2,NN1是actve,NN2是standby状态。下面是升级一个HA集群的步骤(www.askmaclean.com):

1.准备滚动升级

1.运行hdfs dfsadmin -rollingUpgrade prepare 来为滚动创建一个fsimage

2.运行hdfs dfsadmin -rollingUpgrade query 来检查回滚image的状态。等待和重新运这个命令,直到出现“Proceed with rolling upgrade”

  1. 升级active和standby NNs

1.关闭和升级N2

2.使用-rollingUpgrade started选项将NN2作为standby启动

3.将NN1故障转移到NN2,这样NN2变成了active,NN1成为standby

4.关闭和升级NN1

  1. 使用-rollingUpgrade started选项将NN1作为standby启动

 

3.升级DNs

1.选择一小部分DataNodes子集(例如在一个机架中的datanodes)(www.askmaclean.com)

1.运行hdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> upgrade命令来关闭这些DataNode

2.运行hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>来检查,并等到DataNode停止

3.升级和重启dataNode

4.在平行的子集上的dataNode执行上面所有的步骤

2.重复上面步骤直到集群中的所有DataNode都被升级。

4.完成滚动升级

运行hdfs dfsadmin -rollingUpgrade finalize 来完成滚动升级

 

升级联合集群:

在一个联合的机器,这里有多个Namespace,每个Namespace都有一对active和standby NNS。联合集群的升级和非联合集群的升级很相似,除了步骤1和步骤4在每个namespace上执行之外,在每对active和standby NNs上执行步骤2,例如(www.askmaclean.com):

1.为每个Namespace准备滚动升级

2.为每个Namespace升级每对active和standby NN

3.升级DNs

4.为每个Namespace 完成滚动升级

 

2.2 有停机时间的升级

对于非HA 集群,不可能不停机来进行升级,因为需要重启namenodes。但是datanodes仍然可以以滚动的方式升级(www.askmaclean.com)。

 

升级非HA集群:

在一个非HA集群,这里有一个NN,SNN和许多DNs。升级非HA集群和升级HA集群很相似,除了第二步“升级active和stadby NNs”变为:

升级 NN和SNN

1.停止SNN

2.停止和升级NN

3.使用-rollingUpgrade started选项启动NN

4.升级和重启SNN

 

3.降级和回滚

当升级的版本不合适,或者由于一些不太可能的情况,(www.askmaclean.com)升级失败(由于新版本的bug),管理员可以考虑降级HDFS到升级之前的版本,或者回滚HDFS到升级之前的版本和升级之前的状态。

注意降级可以以滚动的方式进行,但是回滚不行。回滚需要集群停机。

注意 降级和回滚只能在滚动升级被启动和升级被终止之前。一个升级可以被 完成,降级,回滚来终止。因此,在执行完成或降级之后执行回滚,或者在完成之后执行降级,可能不可能。

 

4.降级

降级将软件重建到升级之前的版本,并保持用户数据。假设时间T是滚动升级开始的时间,并且升级被降级终止。那么,在T之前或之后创建的文件仍然在HDFS中可用。在T之前或之后的文件仍然会被HDFS删除。

一个新版本可以被降级到之前的版本,只有在namenode布局版本和DataNode布局均在2个版本之间无变化

4.1 无停机时间的降级

在一个HA 集群,当从一个就版本滚动升级到进软件版本的时候,可能需要降级,在滚动的方式中,被升级的机器被回退到就软件版本。和之前一样,假设NN1和NN2分别为active和standby状态。滚动降级的步骤如下:

1.降级DNs

  1. .选择一小部分DataNodes子集(例如在一个机架中的datanodes)

1.运行hdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> upgrade来停止其中选择的DataNode

2.运行hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>来检查,并等待datanode关闭

3.降级和重启DataNode

4.重复上面的操作,直到平行子集中的多(www.askmaclean.com)有DataNode全都执行了上述步骤

2.重复上述步骤直到所有的DataNode都被降级

2.降级active和standby NNs

1.停止并且降级NN2

2.以普通standby方式启动NN2(注意,这里使用-rollingUpgrade downgrade不正确。)

3.从NN1故障转移到NN2这样NN2成为了active 并且NN1成为了standby。

4.关闭和升级NN1

5.以普通standby方式启动NN1(注意,这里使用-rollingUpgrade downgrade不正确。)

 

3.完成回滚降级

运行hdfs dfsadmin -rollingUpgrade finalize来完成回滚降级(www.askmaclean.com)

请注意,datanode 必须在namenode之前进行降级,因为协议的变更可能是向后兼容,当时不会是向前兼容,例如,就datanode可以和新Namenode通信,但是反过来就不行

 

4.2 停机降级

管理可以选择首先关闭集群和降级。一下的步骤:

1.关闭所有NNs和DNs

2.在所有机器上重建之前的版本

3.使用-rollingUpgrade downgrade选项启动NNs

4.以普通方式启动DNs(www.askmaclean.com)

 

5回滚

回滚不仅重建软件到升级之前的版本,还恢复用户数据到升级之前的状态。假设滚动升级开始的时间是T,并且升级被回滚终止。在T之前创建的文件在HDFS仍然可用,但是在T之后创建的文件不可用。在T之前删除的文件,在HDFS仍然删除,但是在T之后删除的文件会被重建(www.askmaclean.com)。

从一个新版本回滚到之前的版本总是被支持的。但是这个不能以滚动的方式进行。其需要集群停机。假设NN1和NN2分别为active和standby状态。回滚的步骤如下:

回滚HDFS

1.停止所有的NNs和DNs

2.在所有机器上重建升级前的版本

3.以acive 使用 -rollingUpgrade rollback选项启动NN1

4.在NN2上运行-bootstrapStandby’,以普通方式以standby启动

5.使用-rollback选项启动DNs

 

6. 滚动升级的命令和启动选项

 

6.1 DFSAdmin 命令

Dfsadmin –rollingUpgrafe

hdfs dfsadmin -rollingUpgrade <query|prepare|finalize>

选项:执行下列升级动作:

query 查询当前滚动升级的状态
prepare 准备一个新的滚动升级
finalize 完成当前的滚动升级

 

dfsadmin –getDatanodeInfo

hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>

 

从给定的datanode获得选项。这个命令用来检测datanode是否存活,可unix命令ping相似(www.askmaclean.com)。

dfsadmin –shutdownDatanode

hdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> [upgrade]

注意这个命令不会等待datanode关闭完成。dfsadmin –getDatanodeInfo命令可以用来检测datanode是否关闭完成对给定的datanode提交关闭请求。如果选项参数指定了upgrade,客户端访问datanode将被建议等待期重启,并且快速启动默认将被启用。当在一定时间没有重启时,客户端会由于超时而忽略这个datanode。在这种情况下,快速启动模式也将被禁用。

 

6.2 NameNode 启动选项

namenode -rollingUpgrade

hdfs namenode -rollingUpgrade <downgrade|rollback|started>

 

选项:当在进行一个滚动升级时,-rollingUpgrade namenode启动选项可以指定多种滚动升级选项

downgrade 重建namenode到升级之前的版本并且保持用户数据
rollback 重建namenode到升级之前的版本但是也恢复用户数据到升级状态之前
started 指定一个滚动升级已经开始,这样namenode应该允许image目录在启动的时候有不同布局版本。

 

Comment

*

沪ICP备14014813号

沪公网安备 31010802001379号