HDFS 滚动升级允许升级各个 HDFS 守护进程。例如,数据节点可以独立于名称节点升级。一个名称节点可以独立于其他名称节点升级。名称节点可以独立于数据节点和日志节点升级。
在 Hadoop v2 中,HDFS 支持高可用性 (HA) 名称节点服务和线兼容性。这两项功能使在不导致 HDFS 停机的情况下升级 HDFS 成为可能。为了在不导致停机的情况下升级 HDFS 集群,必须使用 HA 设置集群。
如果新软件版本中启用了任何新功能,则在升级后可能无法与旧软件版本一起使用。在这种情况下,应按照以下步骤进行升级。
请注意,仅从 Hadoop-2.4.0 开始支持滚动升级。
在 HA 集群中,有两个或更多个 名称节点 (NN)、许多 数据节点 (DN)、几个 日志节点 (JN) 和几个 ZooKeeper 节点 (ZKN)。JN 相对稳定,在大多数情况下升级 HDFS 时不需要升级。在此处描述的滚动升级过程中,仅考虑 NN 和 DN,而不考虑 JN 和 ZKN。升级 JN 和 ZKN 可能会导致集群停机。
假设有两个名称节点 NN1 和 NN2,其中 NN1 和 NN2 分别处于活动和备用状态。以下是升级 HA 集群的步骤
hdfs dfsadmin -rollingUpgrade prepare
” 以创建用于回滚的 fsimage。hdfs dfsadmin -rollingUpgrade query
” 以检查回滚映像的状态。等待并重新运行该命令,直到显示 “Proceed with rolling upgrade
” 消息。-rollingUpgrade started
” 选项将 NN2 作为备用启动。-rollingUpgrade started
” 选项将 NN1 作为备用启动。hdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> upgrade
” 以关闭所选数据节点之一。hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>
” 以检查并等待数据节点关闭。hdfs dfsadmin -rollingUpgrade finalize
”以完成滚动升级。在联合群集中,有多个命名空间和一对每个命名空间的活动和备用NN。升级联合群集的过程类似于升级非联合群集,不同之处在于步骤 1 和步骤 4 在每个命名空间上执行,步骤 2 在每对活动和备用NN上执行,即
对于非 HA 群集,由于需要重新启动名称节点,因此不可能在不宕机的情况下升级 HDFS。但是,数据节点仍然可以滚动方式升级。
在非 HA 群集中,有一个名称节点 (NN)、一个辅助名称节点 (SNN)和许多数据节点 (DN)。升级非 HA 群集的过程类似于升级 HA 群集,不同之处在于步骤 2“升级活动和备用NN”更改为以下内容
-rollingUpgrade started
”选项启动NN。当升级的版本不可用时,或者在某些不太可能的情况下,升级失败(由于较新版本中的错误),管理员可以选择将 HDFS 降级回升级前版本,或将 HDFS 回滚到升级前版本和升级前状态。
请注意,降级可以滚动方式进行,但回滚不行。回滚需要群集宕机。
另请注意,只有在开始滚动升级后并在升级终止之前才能进行降级和回滚。升级可以通过完成、降级或回滚来终止。因此,在完成或降级后可能无法执行回滚,或在完成之后无法执行降级。
降级将软件还原到升级前的版本,并保留用户数据。假设时间T是滚动升级开始时间,并且升级已通过降级终止。然后,在T之前或之后创建的文件将继续在 HDFS 中可用。在T之前或之后删除的文件将继续在 HDFS 中删除。
较新版本只能降级到升级前版本,前提是这两个版本之间的名称节点布局版本和数据节点布局版本均未更改。
在 HA 集群中,当从旧软件版本滚动升级到新软件版本时,可以滚动方式将已升级的机器降级回旧软件版本。与之前相同,假设NN1和NN2分别处于活动和备用状态。以下是无停机时间滚动降级的步骤
hdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> upgrade
” 以关闭所选数据节点之一。hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>
” 以检查并等待数据节点关闭。hdfs dfsadmin -rollingUpgrade finalize
”以完成滚动降级。请注意,必须在降级名称节点之前降级数据节点,因为协议可以以向后兼容的方式更改,但不能向前兼容,即旧数据节点可以与新名称节点通信,但反之则不行。
回滚将软件还原到升级前的版本,但也会将用户数据还原到升级前的状态。假设时间T是滚动升级开始时间,并且升级已通过回滚终止。在T之前创建的文件将继续在 HDFS 中可用,但在T之后创建的文件将不可用。在T之前删除的文件将继续在 HDFS 中删除,但在T之后删除的文件将被还原。
始终支持从较新版本回滚到升级前版本。但是,无法滚动方式执行此操作。它需要集群停机。假设NN1和NN2分别处于活动和备用状态。以下是回滚的步骤
-rollingUpgrade rollback
”选项将 NN1 作为活动节点启动。-rollback
”选项启动 DN。dfsadmin -rollingUpgrade
hdfs dfsadmin -rollingUpgrade <query|prepare|finalize>
执行滚动升级操作。
query |
查询当前滚动升级状态。 |
prepare |
准备新的滚动升级。 |
finalize |
完成当前滚动升级。 |
dfsadmin -getDatanodeInfo
hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>
获取给定数据节点的信息。此命令可用于检查数据节点是否处于活动状态,类似于 Unix ping
命令。
dfsadmin -shutdownDatanode
hdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> [upgrade]
提交给定数据节点的关闭请求。如果指定了可选的 upgrade
参数,则会建议访问数据节点的客户端等待其重新启动,并且将启用快速启动模式。如果重启未及时发生,客户端将超时并忽略数据节点。在这种情况下,快速启动模式也将被禁用。
请注意,此命令不会等待数据节点关闭完成。“dfsadmin -getDatanodeInfo
”命令可用于检查数据节点关闭是否完成。
namenode -rollingUpgrade
hdfs namenode -rollingUpgrade <rollback|started>
当滚动升级正在进行时,-rollingUpgrade
namenode 启动选项用于指定各种滚动升级选项。
rollback |
将 namenode 恢复到升级前版本,但也会将用户数据还原到升级前状态。 |
started |
指定滚动升级已启动,以便 namenode 在启动期间允许具有不同布局版本的映像目录。 |
警告:降级选项已过时。无需显式使用降级选项启动 namenode。