目录
- 1. 介绍
- 2. 升级
-
- 2.1 不停机升级
-
- 2.1.1 升级非联邦集群
- 2.1.2 升级联邦集群
- 2.2 停机升级
-
- 2.2.1 升级非HA集群
- 3. 降级和回滚
-
- 3.1 降级
- 3.2 回滚
- 4. 滚动升级相关命令
-
- 4.1 dfsadmin –rollingUpgrade
- 4.2 dfsadmin –getDatanodeInfo
- 4.3 dfsadmin –shutdownDatanode
- 4.4 namenode –rollingUpgrade
1. 介绍
??HDFS 滚动升级允许升级 HDFS 守护程序。例如,它可以独立于 NameNodes 升级 DataNodes。也可以独立他人 NameNodes 升级单独 NameNode。也可以独立 DataNodes 和 journal nodes 升级 NameNodes。
2. 升级
??在 Hadoop v2 中,HDFS 支持 NameNode 高可用(HA)与线路兼容(wire compatibility)。这两个功能使升级 HDFS 变得可行,不会导致 HDFS 停机。不停机升级 HDFS 必须使用集群 HA 设置群集。 ??如果新软件版本中使用了任何新功能,升级后可能无法与旧软件版本一起使用。在这种情况下,应按以下步骤进行升级。 ??禁用新功能,升级集群,启用新功能。 ??注意,仅从 Hadoop-2.4.0 支持滚动升级。
2.1 不停机升级
??在 HA 有两个或两个以上的群群 NameNode(NN),许多 DataNode(DN),一些 JournalNode(JN)和一些 ZooKeeperNode(ZKN)。JN 在大多数情况下,升级相对稳定 HDFS 不需要升级。只针对滚动升级过程 NNs 和 DNs,JNS 和 ZKNs 都没有。升级 JN 和 ZKN 可能导致集群停机。
2.1.1 升级非联邦集群
??假设有两个名称节点 NN1 和 NN2,其中 NN1 和 NN2 分别处于 Active 和 StandBy 状态。以下是升级 HA 集群步骤:
-
- 运行
hdfs dfsadmin -rollingUpgrade prepare
用于回滚的创建fsimage
- 运行
hdfs dfsadmin -rollingUpgrade query
以检查回滚fsimage
状态。等待并重新操作命令,直到显示Proceeding with Rolling Upgrade
信息。
- 运行
-
- 关闭并升级 NN2。
- 启动 NN2 成为 StandBy 状态通过
-rollingUpgrade started
选项。 - 从 NN1 到 NN2 为了 NN2 和 NN1 变成待机状态。
- 关闭并升级 NN1。
- 启动 NN1 成为 StandBy 状态通过
-rollingUpgrade started
选项。
-
- 选一小部分 DN 节点(如特定机架下的所有数据节点)。
- 运行
hdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> upgrade
关闭所选择的 DN。 - 运行
hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>
检查,等待 DN 关闭。 - 升级并重启 DN 节点。
- 所有选择对子集中 DN 并行执行上述步骤。
- 重复上述步骤,直到升级集中的所有步骤 DN 节点。
-
- 运行
hdfs dfsadmin -rollingUpgrade finalize
完成滚动升级。
- 运行
2.1.2 升级联邦集群
??在联邦集群中,有多个名称空间和一对名称空间 Active 和 StandBy NN。升级联合群集的过程类似于升级非联邦群集的过程,区别在于:
2.2 停机升级
??对于非 HA 集群无法在不停机的情况下升级 HDFS,因为它需要重新启动 NN。但是,DN 滚动模式仍可升级。
2.2.1 升级非HA集群
??在非 HA 集中,有一个 NameNode(NN),SecondaryNameNode(SNN)和许多 DataNodes(DN)。升级非 HA 集群的过程和升级 HA 集群过程相似,区别在于非升级 HA 集群中的第 2 步 升级活动和备用 NN 升级” 更改为以下内容:
-
- 关闭 SNN
- 关闭并升级 NN
- 使用
-rollingUpgrade started
选项启动 NN - 升级并重新启动 SNN
3. 降级和回滚
??如果您不想使用升级版本,或者在某些不太可能的情况下,管理员可以选择升级失败(由于更新版本中的错误) HDFS 升级前版本可能会降级 HDFS 回滚到升级前版本和升级前状态。 ??请注意,降级可以滚动,但不能滚动。回滚要求集群停机。 ??还请注意,只有在开始滚动升级并终止升级之前,才能进行降级和回滚
。升级可以通过完成、降级或回滚来终止。因此,完成或降级后可能无法进行回滚或降级。
3.1 降级
??升级前的版本将恢复软件,并保留用户数据。假设时间 T 是滚动升级开始时间,并且升级通过降级终止。然后,在 T 之前或之后创建的文件 HDFS 还是可用的 T 删除或之后删除的文件 HDFS 仍被删除。 ??仅在两个版本之间 namenode 布局版本和 datanode 当布局版本没有更改时,可以将更新版本降级为升级前版本。 ??在高可用性集群中,当从旧软件版本到新软件版本的滚动升级时,升级后的计算机可以通过滚动方式降级到旧软件版本。假设和以前一样 NN1 和 NN2 分别处于活动状态和待机状态。以下是不停机降级的步骤:
- 降级 DN
- 选择一小部分数据节点(例如,特定机架下的所有数据节点)。
- 运行
hdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> upgrade
关闭所选数据节点之一。 - 运行
hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>
然后等待数据节点关闭。 - 降级并重新启动 datanode。
- 所有选定的数据节点并行执行上述步骤。
- 重复上述步骤,直到集群中所有升级的数据节点降级。
- 降级活动及备用 NN
- 关闭和降级NN2
- 正常启动 NN2 作为待机
- 从 NN1 到 NN2 的故障转移,以便 NN2 变为活动状态,而 NN1 变为待机状态。
- 关闭并降级 NN1。
- 正常启动 NN1 作为待机。
- 完成滚动降级
- 运行
hdfs dfsadmin -rollingUpgrade finalize
以完成滚动降级。
请注意,在降级名称节点之前,必须先降级数据节点,因为协议可以以向后兼容的方式更改,但不能向前兼容,即,旧的数据节点可以与新的名称节点对话,反之则不行。
3.2 回滚
回滚将软件还原到升级前的版本,但也将用户数据还原到升级前的状态。假设时间T是滚动升级开始时间,并且升级通过回滚终止。T 之前创建的文件在 HDFS 中仍然可用,但 T 之后创建的文件不可用。T 之前删除的文件在 HDFS 中仍然被删除,但是 T 之后删除的文件被恢复。 始终支持从较新版本回滚到升级前版本。但是,这不能以滚动方式完成。它需要集群停机。假设 NN1 和 NN2 分别处于活动状态和待机状态。以下是回滚的步骤:
- 回滚 HDFS
- 关闭所有 NN 和 DN
- 在所有计算机上还原升级前的版本。
- 开始 NN1 为活动的
-rollingUpgrade
回滚选项。 - 在 NN2 上运行
-bootstrapStandby
并以待机状态正常启动。 - 使用
-rollback
选项启动 DN。
4. 滚动升级相关命令
4.1 dfsadmin –rollingUpgrade
hdfs dfsadmin -rollingUpgrade <query|prepare|finalize>
4.2 dfsadmin –getDatanodeInfo
hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>
获取有关给定 datanode 的信息。该命令可以像 Unix ping 命令一样用于检查数据节点是否处于活动状态。
4.3 dfsadmin –shutdownDatanode
hdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> [upgrade]
提交给定 datanode 的关闭请求。如果指定了可选的升级参数,则建议访问数据节点的客户端等待其重启,然后启用快速启动模式。如果重启不及时,客户端将超时并忽略数据节点。在这种情况下,快速启动模式也将被禁用。 请注意,该命令不会等待数据节点关闭完成。dfsadmin -getDatanodeInfo
命令可用于检查数据节点关闭是否完成。
4.4 namenode –rollingUpgrade
hdfs namenode -rollingUpgrade <rollback|started>