Hadoop分布式文件系统(HDFS)名称节点维护所有数据节点的状态。有两种状态。第一类型描述数据节点的活动状态,指示该节点是活动的,死亡的还是陈旧的。第二种类型描述管理员状态,该状态指示节点是处于服务状态,退役状态还是处于维护状态。
当管理员停用数据节点时,该数据节点将首先转换为DECOMMISSION_INPROGRESS状态。根据每个块的复制因子,将属于该数据节点的所有块完全复制到其他位置之后。数据节点将转换为DECOMMISSIONED状态。之后,管理员可以关闭节点以执行可能需要几天或几周的长期修复和维护。维修完机器后,可以将机器重新调试回群集。
有时,管理员只需要关闭数据节点数分钟/小时即可执行短期维修/维护。在这种情况下,可能不需要使用因退役而导致的HDFS块复制开销,并且需要进行轻量级处理。这就是维护状态的用途。当管理员将数据节点置于维护状态时,该数据节点将首先转换为ENTERING_MAINTENANCE状态。只要属于该数据节点的所有块都最少复制到其他位置,该数据节点将立即转换为IN_MAINTENANCE州。维护完成后,管理员可以使datanode脱离维护状态。此外,维护状态支持超时,该超时允许管理员配置允许数据节点保持维护状态的最大持续时间。超时后,HDFS将自动将数据节点移出维护状态,而无需人工干预。
总之,datanode管理员操作包括以下内容:
并且datanode管理员状态包括以下内容:
要执行任何datanode admin操作,有两个步骤。
更新主机级配置文件以指示目标数据节点的所需管理状态。配置文件有两种受支持的格式。
运行以下命令以使namenode重新加载主机级配置文件。hdfs dfsadmin [-refreshNodes]
这是namenode使用的默认配置。它仅支持节点停用和重新启用;它不支持与维护状态相关的管理员操作。按照hdfs-default.xml中的说明使用dfs.hosts和dfs.hosts.exclude。
在下面的例子中,主机1和主机2需要在服务。host3和host4需要处于退役状态。
dfs.hosts文件
主机1 主机2 主机3 主机4
dfs.hosts.exclude文件
主机3 主机4
基于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 | 可选的。数据节点将保持维护状态之前的时间间隔(以毫秒为单位)。默认值为永远。 |
在以下示例中,host1和host2需要投入使用。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 //包括维护状态