HDFS 滚动升级

简介

HDFS 滚动升级允许升级各个 HDFS 守护进程。例如,数据节点可以独立于名称节点升级。一个名称节点可以独立于其他名称节点升级。名称节点可以独立于数据节点和日志节点升级。

升级

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

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

  1. 禁用新功能。
  2. 升级集群。
  3. 启用新功能。

请注意,仅从 Hadoop-2.4.0 开始支持滚动升级。

在不导致停机的情况下升级

在 HA 集群中,有两个或更多个 名称节点 (NN)、许多 数据节点 (DN)、几个 日志节点 (JN) 和几个 ZooKeeper 节点 (ZKN)JN 相对稳定,在大多数情况下升级 HDFS 时不需要升级。在此处描述的滚动升级过程中,仅考虑 NNDN,而不考虑 JNZKN。升级 JNZKN 可能会导致集群停机。

升级非联合集群

假设有两个名称节点 NN1NN2,其中 NN1NN2 分别处于活动和备用状态。以下是升级 HA 集群的步骤

  1. 准备滚动升级
    1. 运行 “hdfs dfsadmin -rollingUpgrade prepare” 以创建用于回滚的 fsimage。
    2. 运行 “hdfs dfsadmin -rollingUpgrade query” 以检查回滚映像的状态。等待并重新运行该命令,直到显示 “Proceed with rolling upgrade” 消息。
  2. 升级活动和备用 NN
    1. 关闭并升级 NN2
    2. 使用 “-rollingUpgrade started” 选项将 NN2 作为备用启动。
    3. NN1 故障转移到 NN2,以便 NN2 变为活动,而 NN1 变为备用。
    4. 关闭并升级 NN1
    5. 使用 “-rollingUpgrade started” 选项将 NN1 作为备用启动。
  3. 升级 DN
    1. 选择数据节点的一个小子集(例如,特定机架下的所有数据节点)。
      1. 运行 “hdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> upgrade” 以关闭所选数据节点之一。
      2. 运行 “hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>” 以检查并等待数据节点关闭。
      3. 升级并重新启动数据节点。
      4. 对子集中所有选定的数据节点并行执行以上步骤。
    2. 重复以上步骤,直到群集中的所有数据节点都升级。
  4. 完成滚动升级
    1. 运行“hdfs dfsadmin -rollingUpgrade finalize”以完成滚动升级。

升级联合群集

在联合群集中,有多个命名空间和一对每个命名空间的活动和备用NN。升级联合群集的过程类似于升级非联合群集,不同之处在于步骤 1 和步骤 4 在每个命名空间上执行,步骤 2 在每对活动和备用NN上执行,即

  1. 为每个命名空间准备滚动升级
  2. 为每个命名空间升级活动和备用NN
  3. 升级 DN
  4. 为每个命名空间完成滚动升级

停机升级

对于非 HA 群集,由于需要重新启动名称节点,因此不可能在不宕机的情况下升级 HDFS。但是,数据节点仍然可以滚动方式升级。

升级非 HA 群集

在非 HA 群集中,有一个名称节点 (NN)、一个辅助名称节点 (SNN)和许多数据节点 (DN)。升级非 HA 群集的过程类似于升级 HA 群集,不同之处在于步骤 2“升级活动和备用NN”更改为以下内容

  • 升级NNSNN
    1. 关闭SNN
    2. 关闭并升级NN
    3. 使用“-rollingUpgrade started”选项启动NN
    4. 升级并重新启动SNN

降级和回滚

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

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

另请注意,只有在开始滚动升级后并在升级终止之前才能进行降级和回滚。升级可以通过完成、降级或回滚来终止。因此,在完成或降级后可能无法执行回滚,或在完成之后无法执行降级。

降级

降级将软件还原到升级前的版本,并保留用户数据。假设时间T是滚动升级开始时间,并且升级已通过降级终止。然后,在T之前或之后创建的文件将继续在 HDFS 中可用。在T之前或之后删除的文件将继续在 HDFS 中删除。

较新版本只能降级到升级前版本,前提是这两个版本之间的名称节点布局版本和数据节点布局版本均未更改。

在 HA 集群中,当从旧软件版本滚动升级到新软件版本时,可以滚动方式将已升级的机器降级回旧软件版本。与之前相同,假设NN1NN2分别处于活动和备用状态。以下是无停机时间滚动降级的步骤

  1. 降级DN
    1. 选择数据节点的一个小子集(例如,特定机架下的所有数据节点)。
      1. 运行 “hdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> upgrade” 以关闭所选数据节点之一。
      2. 运行 “hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>” 以检查并等待数据节点关闭。
      3. 降级并重新启动数据节点。
      4. 对子集中所有选定的数据节点并行执行以上步骤。
    2. 重复上述步骤,直到集群中所有已升级的数据节点都降级。
  2. 降级活动和备用NN
    1. 关闭并降级NN2
    2. 正常启动NN2作为备用。
    3. NN1 故障转移到 NN2,以便 NN2 变为活动,而 NN1 变为备用。
    4. 关闭并降级NN1
    5. 正常启动NN1作为备用。
  3. 完成滚动降级
    1. 运行“hdfs dfsadmin -rollingUpgrade finalize”以完成滚动降级。

请注意,必须在降级名称节点之前降级数据节点,因为协议可以以向后兼容的方式更改,但不能向前兼容,即旧数据节点可以与新名称节点通信,但反之则不行。

回滚

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

始终支持从较新版本回滚到升级前版本。但是,无法滚动方式执行此操作。它需要集群停机。假设NN1NN2分别处于活动和备用状态。以下是回滚的步骤

  • 回滚 HDFS
    1. 关闭所有 NNDN
    2. 在所有机器中恢复升级前版本。
    3. 使用“-rollingUpgrade rollback”选项将 NN1 作为活动节点启动。
    4. 在 NN2 上运行 `-bootstrapStandby’ 并正常启动它作为备用节点。
    5. 使用“-rollback”选项启动 DN

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

DFSAdmin 命令

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 启动选项

namenode -rollingUpgrade

hdfs namenode -rollingUpgrade <rollback|started>

当滚动升级正在进行时,-rollingUpgrade namenode 启动选项用于指定各种滚动升级选项。

  • 选项
    rollback 将 namenode 恢复到升级前版本,但也会将用户数据还原到升级前状态。
    started 指定滚动升级已启动,以便 namenode 在启动期间允许具有不同布局版本的映像目录。

警告:降级选项已过时。无需显式使用降级选项启动 namenode。