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时不需要升级。在这里描述的滚动升级过程中,只考虑NNs和DNs,而不考虑JNs和ZKNs。升级JNs和ZKNs可能会导致集群停机。
更新非联邦集群
假设有2个namenodes NN1和NN2,NN1和NN2分别处于活动(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。升级一个联邦集群跟升级一个非联邦集群非常类似,但是Step1和Step4需要对每个命名空间都要进行,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. 升级NN和SNN
① 关闭SNN。
② 关闭并升级NN。
③ 用“-rollingUpgrade started”选项重启NN。
④ 升级并重启SNN。
降级(downgrade )和回滚
当升级版本不理想,或者在一些不太可能的情况下,升级失败(由于更新版本中的错误),管理员可以选择将HDFS降级回升级前版本,或者将HDFS回滚到升级前版本和升级前状态。
请注意,降级可以采用滚动方式,但回滚不能。回滚需要集群停机。
还要注意,降级和回滚只能在滚动升级启动后和升级终止前进行。升级可以通过完成、降级或回滚来终止。因此,可能无法在完成或降级后执行回滚,或在完成后执行降级。
降级
降级将软件恢复到升级前版本并保留用户数据。假设时间T是滚动升级开始时间,升级通过降级终止。然后,在T之前或之后创建的文件在HDFS中仍然可用。在T之前或之后删除的文件在HDFS中保持删除状态。
只有在NameNode布局版本和datanode布局版本在这两个版本之间没有变化的情况下,新版本才可以降级到升级前版本。
无停机降级
在HA集群中,当从旧软件版本到新软件版本的滚动升级正在进行时,可以以滚动方式将升级后的机器降级回旧软件版本。和以前一样,假设NN1和NN2分别处于活动和待机状态。以下是滚动降级的步骤:
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通话,但不能反之。
停机降级
管理员可以选择先关闭集群,然后再降级。以下是步骤:
① 关闭所有NNs和DNs。
② 恢复所有机器为的升级前版本。
③ 使用“-rollingUpgrade downgrade”选项启动NNs。
④ 正常启动DNs。
回滚
回滚将软件恢复到升级前版本,但也将用户数据恢复到升级前状态。假设时间T是滚动升级开始时间,并且通过回滚终止升级。T之前创建的文件在HDFS中仍然可用,但是T之后创建的文件变得不可用。在T之前删除的文件在HDFS中仍然被删除,但是在T之后删除的文件被恢复。
始终支持从较新版本回滚到升级前版本。然而,这不能以滚动的方式进行。它需要集群停机。假设NN1和NN2分别处于活动和待机状态。以下是回滚的步骤:
回滚HDFS
① 关停所有NNs和DNs。
② 恢复所有机器为升级前版本。
③ 使用“-rollingUpgrade rollback” 选项来启动NN1为Active状态。
④ 在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滚动升级的主要内容,如果未能解决你的问题,请参考以下文章