YARN导出HBase快照任务因部分DataNode满盘终止,仍有节点空间充足
问题根因
你遇到的报错是HDFS无法为新块满足最小副本写入要求,所有节点被排除的核心逻辑为:
- 默认HDFS块放置策略未优先选择剩余空间大的节点,写入数据时均匀分散到所有DataNode,导致5台28TB小容量节点率先触达存储使用率上限,被标记为不可写
- 剩余3台128TB大容量节点未被选中写入,是默认放置策略的均衡逻辑未优先匹配剩余空间属性导致
可配置的优化参数
所有配置均在目标Hadoop集群的hdfs-site.xml中修改:
- 优先选择剩余空间充足的节点写入块
调整块放置策略为可用空间优先策略:
修改后需要重启NameNode生效。<property> <name>dfs.block.replicator.classname</name> <value>org.apache.hadoop.hdfs.server.blockmanagement.AvailableSpaceBlockPlacementPolicy</value> <description>块放置策略优先选择剩余存储空间更多的DataNode,避免小容量节点提前被写满</description> </property> - 调整DataNode存储阈值,避免节点提前被标记为不可写
dfs.datanode.du.reserved:设置每台DataNode磁盘预留的存储空间,单位为字节。例如预留1TB空间可配置为1099511627776,避免磁盘被完全写满导致节点被排除dfs.datanode.max.utilization.percentage:DataNode存储使用率最大阈值,默认值为0.95(即95%),超过该阈值的节点不会接收新块写入。可根据实际情况适当上调,最大不建议超过0.98,避免磁盘占满引发其他故障
上述两个参数修改后需要重启所有DataNode生效。
- 调整HDFS均衡器策略,自动平衡节点存储使用率
<property> <name>dfs.balancer.threshold</name> <value>5</value> <description>节点存储使用率与集群平均使用率差值超过该阈值(单位%)时,均衡器会自动迁移数据平衡负载,默认值为10</description> </property>
临时应急方案
如果需要立刻恢复导出任务,可先将5台已满的小容量DataNode执行退役(Decommission)操作,集群会自动将新写入数据全部路由到剩余3台大容量节点,导出完成后再执行数据均衡操作即可。
内容的提问来源于stack exchange,提问作者gesala
相关产品推荐
相关产品推荐

