HDFS DataNode 管理指南
Posted 程序猿码码
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDFS DataNode 管理指南相关的知识,希望对你有一定的参考价值。
Apache Hadoop 2.9.0
原文:
http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsDataNodeAdminGuide.html
(如果转发,请标明出处)
概述
HDFS的namenode维护所有datanodes的状态。有2种状态,第一种描述一个datanode的活跃度,指示该节点是 live, dead 或者stale;第二种状态描述管理状态,指明节点是处于服务中,停用,还是维护中(service, decommissioned or under maintenance)。
当管理员停用一个datanode时,datanode将首先装换成DECOMMISSION_INPROGRESS 状态。当属于这个datanode所有块都根据每个块的副本因子完成复制后,datanode将会转变成DECOMMISSIONED 状态。之后,管理员可以关闭节点以执行可能需要数天或者数周的长期修复和维护,机器修复后,可将机器重新返回集群。
有时,管理员只需将datanodes 停机数分钟/小时即可执行完短期修复/维护,这种情况下,可能不需要(停用引发的)HDFS块复制开销,而且需要轻量级的过程。这就是维护状态的用途。当管理员将一个datanode 置于维护状态时,这个datanode 将首先转换成ENTERING_MAINTENANCE 状态。只要属于该datanode 的所有数据块被最小程度的复制到其他位置,该datanode 就会立即转换成IN_MAINTENANCE 状态。维护完成后,管理员可以使datanode 脱离维护状态。此外,维护状态支持超时设置,允许管理员配置datanode 保持维护状态的最长持续时间。超时后,HDFS将自动将datanode 从维护状态转换出来,无需人工干预。
总之,datanode管理操作包括以下内容:
① 使退役(Decommission)
② 重新委任(Recommission)
③ 将节点置于维护状态(Putting nodes in maintenance state)
④ 使节点脱离维护状态(Taking nodes out of maintenance state)
所有datanode管理状态如下:
① NORMAL 节点正在提供服务
② DECOMMISSIONED 节点被退役
③ DECOMMISSION_INPROGRESS 节点正在转换成 DECOMMISSIONED 状态.
④ IN_MAINTENANCE 节点是维护状态.
⑤ ENTERING_MAINTENANCE 节点正在转换成维护状态.
Host级别(host-level)设置
要执行任何datanode管理操作,需要两个步骤。
1) 更新主机级配置文件以指示目标datanodes的所需管理状态。配置文件支持两种格式。
② 基于JSON的配置。配置文件是JSON格式。每个element 映射到一个datanode,并且每个datanode可以有多个属性。将datanode置于维护状态需要这种格式的配置。
2) 运行下面的命令来让namenode重新加载主机级别的配置文件:hdfs dfsadmin [-refreshNodes]
只是主机名(Hostname-only)的配置
这是namenode使用的默认配置。只支持节点退役和重新使用,不支持与维护状态相关的管理操作。使用 dfs.hosts 和hdfs-default.xml中所述的 dfs.hosts.exclude。
下面例子中,host1和host2需要处于服务状态。Host3,host4,需要处于退役状态。
dfs.hosts 文件text host1 host2 host3 host4 dfs.hosts.exclude文件 text host3 host4。
基于JSON的配置
基于JSON的格式是一种新的配置格式,支持datanode的通用属性。如hdfs-default.xml中所述,配置以下参数来启用JSON格式配置
Setting |
Value |
dfs.namenode.hosts.provider.classname |
org.apache.hadoop.hdfs.server.blockmanagement.CombinedHostFileManager |
dfs.hosts |
json hosts 文件路径 |
下面是HDFS当前支持的属性列表:
Property |
Description |
hostName |
必须. datanode的主机名. |
upgradeDomain |
可选. datanode的upgrade domain id. |
adminState |
可选. The expected admin state. 默认值是 NORMAL; 退役是DECOMMISSIONED ;维护状态是 IN_MAINTENANCE |
port |
可选. datanode端口号 |
maintenanceExpireTimeInMS |
可选. datanode 将保持维护状态的时间(毫秒)。默认值为永久。 |
下面的例子中,host1和host2需要处于服务状态,Host3需要处于退役状态,host4需要处于维护状态。
dfs.hosts file json [ { "hostName": "host1" }, { "hostName": "host2", "upgradeDomain": "ud0" }, { "hostName": "host3", "adminState": "DECOMMISSIONED" }, { "hostName": "host4", "upgradeDomain": "ud2", "adminState": "IN_MAINTENANCE" } ]
集群层次(Cluster-level )设置
下面是一些datanode管理相关的集群层次的设置。通常情况下,我们使用默认值,查看 hdfs-default.xm来获得描述以及默认值。
dfs.namenode.maintenance.replication.min
dfs.namenode.decommission.interval
dfs.namenode.decommission.blocks.per.interval
dfs.namenode.decommission.max.concurrent.tracked.nodes
Metrics
管理状态是namenode webUI and JMX的一部分。如 HDFSCommands.html解释的一样,也可以使用下面的命令来验证管理状态。
使用dfsadmin 来检验集群层次的管理状态
hdfs dfsadmin -report
使用fsck 检测在特定路径上存储数据的datanode的管理状态。为了向后兼容,需要特殊标志来返回维护状态。
hdfs fsck <path> // only show decommission state
hdfs fsck <path> -maintenance // include maintenance state
----------- 全文完 ---------------------
以上是关于HDFS DataNode 管理指南的主要内容,如果未能解决你的问题,请参考以下文章