Hadoop 分布式文件系统 (HDFS) 名称节点维护所有数据节点的状态。有两种类型的状态。第一种类型描述数据节点的活动状态,指示节点是活动、死亡还是过时。第二种类型描述管理状态,指示节点处于服务中、已停用或正在维护中。
当管理员停用数据节点时,数据节点将首先转换为 DECOMMISSION_INPROGRESS
状态。在属于该数据节点的所有块都根据每个块的复制因子在其他地方完全复制后,数据节点将转换为 DECOMMISSIONED
状态。之后,管理员可以关闭节点以执行可能需要数天或数周的长期修复和维护。在机器修复后,可以将机器重新纳入集群。
有时,管理员只需要将数据节点关闭几分钟/小时来执行短期修复/维护。在这种情况下,由停用引起 HDFS 块复制开销可能没有必要,并且需要一个轻量级进程。这就是维护状态的用途。当管理员将数据节点置于维护状态时,数据节点将首先转换为ENTERING_MAINTENANCE
状态。只要属于该数据节点的所有块在其他地方至少复制了一次,数据节点将立即转换为IN_MAINTENANCE
状态。维护完成后,管理员可以将数据节点移出维护状态。此外,维护状态支持超时,允许管理员配置数据节点允许停留在维护状态中的最长时间。超时后,数据节点将由 HDFS 自动退出维护状态,而无需人工干预。
总之,数据节点管理操作包括以下内容
数据节点管理状态包括以下内容
NORMAL
节点正在服务。DECOMMISSIONED
节点已停用。DECOMMISSION_INPROGRESS
节点正在转换为 DECOMMISSIONED 状态。IN_MAINTENANCE
节点处于维护状态。ENTERING_MAINTENANCE
节点正在转换为维护状态。要执行任何数据节点管理操作,有两个步骤。
更新主机级配置文件以指示目标数据节点的所需管理状态。配置文件有两种受支持的格式。
运行以下命令让 NameNode 重新加载主机级配置文件。hdfs dfsadmin [-refreshNodes]
这是 NameNode 使用的默认配置。它仅支持节点停用和重新启用;它不支持与维护状态相关的管理操作。按照 hdfs-default.xml 中的说明使用 dfs.hosts
和 dfs.hosts.exclude
。
在以下示例中,host1
和 host2
需要处于服务状态。host3
和 host4
需要处于已退役状态。
dfs.hosts 文件
host1 host2 host3 host4
dfs.hosts.exclude 文件
host3 host4
基于 JSON 的格式是一种新的配置格式,支持数据节点上的通用属性。如 hdfs-default.xml 中所述,设置以下配置以启用基于 JSON 的格式。
设置 | 值 |
---|---|
dfs.namenode.hosts.provider.classname |
org.apache.hadoop.hdfs.server.blockmanagement.CombinedHostFileManager |
dfs.hosts |
json 主机文件的路径 |
以下是 HDFS 当前支持的属性列表。
属性 | 说明 |
---|---|
hostName |
必需。数据节点的主机名。 |
upgradeDomain |
可选。数据节点的升级域 ID。 |
adminState |
可选。预期的管理状态。默认值为 NORMAL ;DECOMMISSIONED 表示已退役;IN_MAINTENANCE 表示维护状态。 |
port |
可选。数据节点的端口号 |
maintenanceExpireTimeInMS |
可选。数据节点保持在维护状态的时间(以毫秒为单位)。默认值是永久。 |
在以下示例中,host1
和 host2
需要处于服务状态。host3
需要处于已退役状态。host4
需要处于维护状态。
dfs.hosts 文件
[ { "hostName": "host1" }, { "hostName": "host2", "upgradeDomain": "ud0" }, { "hostName": "host3", "adminState": "DECOMMISSIONED" }, { "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
当包含大量块的数据节点被退役时,原始退役算法会出现问题,例如
HDFS-14854 引入了新的退役监视器来缓解这些问题。此功能当前标记为实验性,并且默认情况下处于禁用状态。您可以在 hdfs-site.xml 中将 dfs.namenode.decommission.monitor.class
的值设置为 org.apache.hadoop.hdfs.server.blockmanagement.DatanodeAdminBackoffMonitor
以启用此功能。
相关配置属性列在下面的表格中。有关说明和默认值,请参阅 hdfs-default.xml。
属性 |
---|
dfs.namenode.decommission.monitor.class |
dfs.namenode.decommission.backoff.monitor.pending.limit |
dfs.namenode.decommission.backoff.monitor.pending.blocks.per.lock |
管理状态是 NameNode 的 WebUI 和 JMX 的一部分。如 HDFSCommands.html 中所述,您还可以使用以下命令验证管理状态。
使用 dfsadmin
检查集群级别的管理状态。
hdfs dfsadmin -report
使用 fsck
检查存储特定路径数据的 DataNode 的管理状态。为了向后兼容,需要一个特殊标志来返回维护状态。
hdfs fsck <path> // only show decommission state hdfs fsck <path> -maintenance // include maintenance state