HDFS滚动升级

Posted 程序猿码码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDFS滚动升级相关的知识,希望对你有一定的参考价值。

Apache Hadoop 2.9.1 

 

请查看原文:http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsRollingUpgrade.html

(如果转发,请标明出处)

简介

HDFS滚动升级允许升级单个HDFS后台。例如,datanodes 可以独立于namenodes进行升级。namenodes可以独立于其他namenodes进行升级。namenodes可以独立于datanodes 和日志节点进行升级。

升级

Hadoop v2中,HDFS支持高可用性( HA )namenode 服务和线路兼容性。这两项功能使得在HDFS不停机的情况下完成升级成为可能。为了在不停机的情况下升级HDFS集群集群必须使用HA设置。

如果新版本中启用了任何新功能,升级后可能无法与旧软件版本配合使用。在这种情况下,应通过以下步骤进行升级

① 关闭新特征。

② 升级集群。

③ 打开新特征开关。

需要注意的是,从 Hadoop-2.4.0版本才开始支持滚动升级。

无停机升级

在一个HA集群中,有2个或者多个NameNodes(NNs),多个DataNodes(DNs),一些JournalNodes(JNs)和一些ZooKeeperNodes(ZKNs)JNs相对稳定,在大多数情况下升级HDFS时不需要升级。在这里描述的滚动升级过程中,只考虑NNsDNs,而不考虑JNsZKNs。升级JNsZKNs可能会导致集群停机。

更新非联邦集群

假设有2namenodes NN1NN2,NN1NN2分别处于活动(active)和待机standby状态。下面是升级HA集群的步骤:

1. 准备滚动升级

① 运行hdfs dfsadmin -rollingUpgrade prepare”来为回滚创建一个fsimage

② 运行hdfs dfsadmin -rollingUpgrade query来检测回滚镜像的状态。等待并且重新执行命令,直到显示“Proceed with rolling upgrade” 消息。

2. 更新活动(active)和备用(standby)状态的NNs

① 关闭并升级NN2

② 通过-rollingUpgrade started选项重启NN2为备用(standby)状态。

③ NN1故障切换到NN2,使NN2变为活动状态,NN1变为备用状态。

④ 关闭并重启NN1

⑤ 通过-rollingUpgrade started选项重启NN2为备用(standby)状态。

 

3. 升级DNs

1) 选择一个datanodes的最小子集(例如一个机架上的所有datanodes

① 运行hdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> upgrade”来关闭任一选定的datanodes

② 运行hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>来检测并等待datanode关闭。

③ 升级并重启datanode

④ 对子集中所有选定的datanode并行执行上述步骤。

2) 重复上述步骤,直到集群中的所有datanode都升级。

4. 完成滚动升级

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

升级联邦集群

 

在一个联邦集群中,有多个命名空间,每个命名空间都有一组活动和备用NNs。升级一个联邦集群跟升级一个非联邦集群非常类似,但是Step1Step4需要对每个命名空间都要进行,Step2需要在每组活动和备用NNs上实行。例如:

1. 为每个命名空间准备滚动升级。

2. 为每个命名空间升级活动和备用NNs

3. 升级DNs

4. 为每个命名空间完成滚动升级。

停机升级

对于非HA集群,在不停机的情况下升级HDFS是不可能的,因为它需要重启namenodes。但是,datanodes 仍然可以滚动升级。

升级非HA集群

在一个非HA集群中,有一个NN,一个SecondaryNameNode (SNN)和多个DNs。升级一个非HA集群同升级HA集群非常类似,除了Step2中的 “更新活动(active)备用(standby状态NNs”需要改成以下:

1. 升级NNSNN

① 关闭SNN

② 关闭并升级NN

③ -rollingUpgrade started选项重启NN

④ 升级并重启SNN

降级(downgrade )和回滚

当升级版本不理想,或者在一些不太可能的情况下,升级失败(由于更新版本中的错误),管理员可以选择将HDFS降级回升级前版本,或者将HDFS回滚到升级前版本和升级前状态。

请注意,降级可以采用滚动方式,但回滚不能。回滚需要集群停机。

还要注意,降级和回滚只能在滚动升级启动后和升级终止前进行。升级可以通过完成、降级或回滚来终止。因此,可能无法在完成或降级后执行回滚,或在完成后执行降级。

降级

降级将软件恢复到升级前版本并保留用户数据。假设时间T是滚动升级开始时间,升级通过降级终止。然后,在T之前或之后创建的文件在HDFS中仍然可用。在T之前或之后删除的文件在HDFS中保持删除状态。

只有在NameNode布局版本和datanode布局版本在这两个版本之间没有变化的情况下,新版本才可以降级到升级前版本。

无停机降级

HA集群中,当从旧软件版本到新软件版本的滚动升级正在进行时,可以以滚动方式将升级后的机器降级回旧软件版本。和以前一样,假设NN1NN2分别处于活动和待机状态。以下是滚动降级的步骤:

1. DNs降级

1) 选择一个datanodes的最小子集(例如一个机架下的所有datanodes

① 运行hdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> upgrade来关闭任一选中的datanodes

② 运行hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>来检测和等待datanode关闭。

③ 降级并重启datanode

④ 针对子集中的每个datanodes并行执行上述步骤。

2) 重复上述步骤直到集群中升级的所有datanodes降级。

2. 降级活动和备用NNS

① 关闭并降级NN2

② 正常启动NN2为备用状态(请注意,这里使用“-rollingUpgrade downgrade”选项是不正确的)。

③ NN1故障切换到NN2,使NN2变为活动状态,NN1变为备用状态。

④ 关闭并升级NN1

⑤ 正常启动NN1为备用状态(请注意,这里使用“-rollingUpgrade downgrade”选项是不正确的)。

3. 完成滚动降级

① 运行  hdfs dfsadmin -rollingUpgrade finalize来完成滚动降级。

 

请注意,在降级namenodes之前,必须降级datanodes,因为协议可以以向后兼容的方式改变,但不能向前兼容,即旧datanodes可以与新namenodes通话,但不能反之。

停机降级

管理员可以选择先关闭集群,然后再降级。以下是步骤:

① 关闭所有NNsDNs

② 恢复所有机器为的升级前版本。

③ 使用-rollingUpgrade downgrade”选项启动NNs

④ 正常启动DNs

回滚

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

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

回滚HDFS

① 关停所有NNsDNs

② 恢复所有机器为升级前版本。

③ 使用-rollingUpgrade rollback选项来启动NN1Active状态。

④ NN2上运行` - bootstrastandby ',并以待机状态正常启动。

⑤ 使用-rollback”选项启动DNs

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

DFSAdmin  命令

1. dfsadmin -rollingUpgrade

hdfs dfsadmin -rollingUpgrade <query|prepare|finalize>

执行滚动升级操作。

选项:

query 

查询当前滚动升级状态

prepare 

准备一次新的滚动升级

finalize 

完成当前的滚动升级 

2. dfsadmin -getDatanodeInfo

hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>

获取有关给定datanode的信息。此命令可用于检查datanode是否像Unix ping命令一样处于活动状态。

 

3. dfsadmin -shutdownDatanode

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

提交给定datanode的关闭请求。如果指定了可选的update参数,则建议访问datanode的客户端等待重新启动,并启用快速启动模式。当重启没有及时发生时,客户端将超时并忽略datanode。在这种情况下,快速启动模式也将被禁用

请注意,该命令不会等待datanode关闭完成。“dfsadmin - getDatanodeInfo”命令可用于检查datanode关闭是否完成。

 

NameNode启动选项。

1. namenode -rollingUpgrade

hdfs namenode -rollingUpgrade <downgrade|rollback|started>

滚动升级过程中,-rollingUpgrade  namenode启动选项用于指定各种滚动升级选项。

 

选项

downgrade 

NameNode恢复到升级前版本并保留用户数据。

rollback 

NameNode恢复到升级前版本,但也将用户数据恢复到升级前状态。

started 

指定已经启动的滚动升级,以便NameNode在启动期间允许具有不同布局版本的映像目录。

  

----------------- 全文完 ------------------------------

 


以上是关于HDFS滚动升级的主要内容,如果未能解决你的问题,请参考以下文章

HDFS集群滚动升级

HDFS实践|HDFS3.2升级在滴滴的实践

ES 集群滚动升级

Kubernetes--应用滚动升级

K8S系列深入解析滚动升级

ElasticsearchElasticsearch 5.1.2滚动升级至 5.6.4