Hadoop 文档

General

Common

HDFS

MapReduce

MapReduce REST APIs

YARN

YARN REST APIs

YARN Service

Submarine

Hadoop Compatible File Systems

Auth

Tools

Reference

Configuration

总览

Hadoop分布式文件系统(HDFS)名称节点维护所有数据节点的状态。有两种状态。第一类型描述数据节点的活动状态,指示该节点是活动的,死亡的还是陈旧的。第二种类型描述管理员状态,该状态指示节点是处于服务状态,退役状态还是处于维护状态。

当管理员停用数据节点时,该数据节点将首先转换为DECOMMISSION_INPROGRESS状态。根据每个块的复制因子,将属于该数据节点的所有块完全复制到其他位置之后。数据节点将转换为DECOMMISSIONED状态。之后,管理员可以关闭节点以执行可能需要几天或几周的长期修复和维护。维修完机器后,可以将机器重新调试回群集。

有时,管理员只需要关闭数据节点数分钟/小时即可执行短期维修/维护。在这种情况下,可能不需要使用因退役而导致的HDFS块复制开销,并且需要进行轻量级处理。这就是维护状态的用途。当管理员将数据节点置于维护状态时,该数据节点将首先转换为ENTERING_MAINTENANCE状态。只要属于该数据节点的所有块都最少复制到其他位置,该数据节点将立即转换为IN_MAINTENANCE州。维护完成后,管理员可以使datanode脱离维护状态。此外,维护状态支持超时,该超时允许管理员配置允许数据节点保持维护状态的最大持续时间。超时后,HDFS将自动将数据节点移出维护状态,而无需人工干预。

总之,datanode管理员操作包括以下内容:

  • 退役
  • 重新委托
  • 将节点置于维护状态
  • 使节点退出维护状态

并且datanode管理员状态包括以下内容:

  • NORMAL节点正在使用中。
  • 退役节点已退役。
  • DECOMMISSION_INPROGRESS节点正在转换为DECOMMISSIONED状态。
  • IN_MAINTENANCE节点处于维护状态。
  • ENTERING_MAINTENANCE节点正在转换为维护状态。

主机级设置

要执行任何datanode admin操作,有两个步骤。

  • 更新主机级配置文件以指示目标数据节点的所需管理状态。配置文件有两种受支持的格式。

    • 仅主机名配置。每行包括一个数据节点的主机名/ IP地址。这是默认格式。
    • 基于JSON的配置。配置为JSON格式。每个元素映射到一个数据节点,并且每个数据节点可以具有多个属性。需要这种格式才能将数据节点置于维护状态。
  • 运行以下命令以使namenode重新加载主机级配置文件。hdfs dfsadmin [-refreshNodes]

仅主机名配置

这是namenode使用的默认配置。它仅支持节点停用和重新启用;它不支持与维护状态相关的管理员操作。按照hdfs-default.xml中的说明使用dfs.hostsdfs.hosts.exclude

在下面的例子中,主机1主机2需要在服务。host3host4需要处于退役状态。

dfs.hosts文件

主机1
主机2
主机3
主机4

dfs.hosts.exclude文件

主机3
主机4

基于JSON的配置

基于JSON的格式是新的配置格式,支持数据节点上的常规属性。设置以下配置以启用基于JSON的格式,如hdfs-default.xml中所述

设置
dfs.namenode.hosts.provider.classname org.apache.hadoop.hdfs.server.blockmanagement.CombinedHostFileManager
dfs.hosts json主机文件的路径

这是HDFS当前支持的属性的列表。

属性 描述
主机名 需要。数据节点的主机名。
upgradeDomain 可选的。数据节点的升级域ID。
adminState 可选的。预期的管理员状态。默认值是NORMAL ; 退役的退役; IN_MAINTENANCE用于维护状态。
港口 可选的。数据节点的端口号
maintenanceExpireTimeInMS 可选的。数据节点将保持维护状态之前的时间间隔(以毫秒为单位)。默认值为永远。

在以下示例中,host1host2需要投入使用。host3需要处于退役状态。host4需要处于维护状态。

dfs.hosts文件

[
  {
    “ hostName”:“ host1”
  },
  {
    “ hostName”:“ host2”,
    “ upgradeDomain”:“ ud0”
  },
  {
    “ hostName”:“ host3”,
    “ adminState”:“已停用”
  },
  {
    “ hostName”:“ host4”,
    “ upgradeDomain”:“ ud2”,
    “ adminState”:“ IN_MAINTENANCE”
  }
]

集群级设置

有几个与数据节点管理相关的群集级别设置。对于常见的用例,您应该依赖默认值。请参考hdfs-default.xml以获得描述和默认值。

dfs.namenode.maintenance.replication.min
dfs.namenode.decommission.interval
dfs.namenode.decommission.blocks.per.interval
dfs.namenode.decommission.max.concurrent.tracked.nodes

指标

管理员状态是namenode的webUI和JMX的一部分。如HDFSCommands.html中所述,您还可以使用以下命令来验证管理员状态。

使用dfsadmin在群集级别检查管理员状态。

hdfs dfsadmin-报告

使用fsck检查在特定路径下存储数据的数据节点的管理状态。为了向后兼容,需要一个特殊的标志来返回维护状态。

hdfs fsck <path> //仅显示退役状态
hdfs fsck <path> -maintenance //包括维护状态