最佳实践 · 大数据运维

待环境验证

HDFS 容量与副本健康巡检

使用 HDFS 报告和指定路径检查,识别 DataNode 容量倾斜、副本不足与文件损坏,记录 Hadoop 集群的日常健康基线。

Hadoop大数据监控告警
阅读导引 · 理解后再操作

这篇知识解决什么问题

HDFS 巡检需要同时回答数据还能否读取、冗余能否恢复以及剩余空间能否满足放置策略。先建立集群和业务路径基线,再下钻到异常节点、机架与文件类型,把容量趋势、欠副本和损坏块分开排序,避免只交付一个健康汇总状态。

可用空间必须是满足策略的空间

将集群剩余量进一步拆成节点、机架和存储类型,并与业务目录的普通副本或纠删码策略对应。全局空闲无法证明目标块有合格落点,目录配额也可能先于物理容量成为约束。巡检应注明每种口径覆盖范围,避免把不同层级的容量数值相互替换。

健康结论需要基线与受影响路径

欠副本、放置异常和缺失损坏块影响不同,应分别记录首次出现、当前范围及恢复趋势。对代表性目录保留有限检查结果,再由业务补充已有读取或内容校验。一个汇总状态不能说明所有文件语义正确,也无法解释新增写入、快照和维护共同占用的余量。

进入文章正文
关联架构图解8 个组件 · 点击展开

参考图展示客户端查询 NameNode 元数据后直接访问 DataNode 的存储路径,并提醒计算与存储可能共置。本篇主要阅读 HDFS 部分;图未逐一展开机架、具体块副本、纠删码条带及快照占用。

查看场景架构与实施步骤
参考架构 · 非实时拓扑

HDFS 存储与 YARN 计算的双层架构

把 HDFS 元数据、数据块与 YARN 资源调度分开阅读:客户端直接读写 DataNode,作业由 ApplicationMaster 协调执行;维护需要同时满足数据副本和队列容量条件。

  • 数据 / 请求
  • 控制 / 管理
  • 观测 / 查询

点击组件,在图下方查看职责;连线编号对应流向解读。小屏可横向滚动,或直接展开文字说明。

HDFS 存储与 YARN 计算的双层架构:组件关系图把 HDFS 元数据、数据块与 YARN 资源调度分开阅读:客户端直接读写 DataNode,作业由 ApplicationMaster 协调执行;维护需要同时满足数据副本和队列容量条件。 作业与数据客户端 → NameNode:查询元数据;作业与数据客户端 → DataNode 组:直接读写数据块;NameNode → DataNode 组:块管理指令;作业与数据客户端 → ResourceManager:提交应用;ResourceManager → ApplicationMaster:分配容器资源;ApplicationMaster → NodeManager 组:协调任务执行;Prometheus → NameNode:采集存储状态;Prometheus → ResourceManager:采集队列状态;Grafana → Prometheus:查询趋势。箭头说明见下方流向解读。
逻辑参考图,只展开现有集群的核心职责;主备、JournalNode、机架与副本实例未全部展开,不代表真实部署或维护已验证。

NameNode

控制 / 治理

表示当前有效的 HDFS 元数据入口;实际主备和 JournalNode 健康必须核对。SecondaryNameNode 不能被当作热备。

查看关联工具
全部组件职责 8 个组件
NameNode
表示当前有效的 HDFS 元数据入口;实际主备和 JournalNode 健康必须核对。SecondaryNameNode 不能被当作热备。工具介绍 NameNode
DataNode 组
保存数据块并服务客户端读写,副本和机架放置需按真实拓扑核对;节点退出前评估剩余可用副本。工具介绍 DataNode 组
作业与数据客户端
客户端查询 HDFS 元数据后直接访问 DataNode;YARN 应用提交走独立计算控制路径,不把所有流量都画成经过 NameNode。
ResourceManager
管理计算资源与队列分配;排队还可能受用户配额和请求规格影响,不能仅用总体 CPU 判断。工具介绍 ResourceManager
ApplicationMaster
为本应用申请资源、跟踪任务,并与 NodeManager 协调容器执行;任务管理不由全局调度器单独承担。
Grafana
将主备、容量、块健康和排队原因关联到同一时间范围,给值班人员保留原生命令核对入口。工具介绍 Grafana
Prometheus
通过已验证的指标适配端点采集控制面、存储、计算和关键作业信号;图中仅展示核心入口观测。工具介绍 Prometheus
NodeManager 组
在计算节点管理任务容器及资源状态,维护前应按所选版本流程排空或退出调度,不能只停止进程。工具介绍 NodeManager 组
流向解读 9 条连接
  1. 1

    作业与数据客户端 NameNode

    控制 / 管理 · 查询元数据

    客户端请求文件与块位置元数据,业务数据块本身不流经 NameNode。

  2. 2

    作业与数据客户端 DataNode 组

    数据 / 请求 · 直接读写数据块

    客户端根据元数据访问 DataNode;图中聚合多个数据节点,未展开具体写入复制管线。

  3. 3

    NameNode DataNode 组

    控制 / 管理 · 块管理指令

    NameNode 管理块放置与复制,DataNode 心跳、块报告等返回关系在此简化省略。

  4. 4

    作业与数据客户端 ResourceManager

    控制 / 管理 · 提交应用

    作业提交进入 YARN 控制路径,需核对队列、配额、资源请求和业务窗口。

  5. 5

    ResourceManager ApplicationMaster

    控制 / 管理 · 分配容器资源

    ApplicationMaster 请求资源后由 ResourceManager 返回分配结果,本连线强调调度职责。

  6. 6

    ApplicationMaster NodeManager 组

    控制 / 管理 · 协调任务执行

    ApplicationMaster 与获分配节点的 NodeManager 协调启动及监控任务容器。

  7. 7

    Prometheus NameNode

    观测 / 查询 · 采集存储状态

    通过实际启用的端点或适配器观测角色、容量和块健康,并与原生命令抽样比对。

  8. 8

    Prometheus ResourceManager

    观测 / 查询 · 采集队列状态

    观测队列和应用状态,采集失败与真实资源不足分别呈现。

  9. 9

    Grafana Prometheus

    观测 / 查询 · 查询趋势

    查询存储与计算侧同时间段趋势,为单节点维护提供可复核证据。

故障域与操作边界

一个物理节点可能同时影响两层

DataNode 与 NodeManager 共置时,退出节点会同时减少存储副本与计算容量;不能只看磁盘健康或只看队列资源。

核心角色不明时停止维护

图中未展开的主备、JournalNode 和机架关系仍是前置条件。同故障域不可并行维护,副本或调度不满足时不能强制退出。

副本和快照不是独立备份

数据删除、逻辑损坏与整个故障域受损需要独立恢复路径;全量 fsck、均衡和退役还需另行评估负载。

架构依据与版本核对 2 篇官方资料

图解是本站基于官方资料整理的逻辑参考;实施前仍需核对实际部署版本、组件支持范围与变更审批。

适用范围与前提

本文配合「Hadoop 集群运维」场景,适用于 Hadoop 3.x 的 HDFS 日常巡检。先确认目标 nameservice、客户端配置和认证身份,具备读取管理报告及目标目录的权限。将副本存储与纠删码目录分别记录,并准备业务目录负责人、历史容量曲线和维护计划。示例为待环境验证的只读检查,不包含自动清理。

从集群和节点两层看容量

hdfs getconf -confKey fs.defaultFS
hdfs dfsadmin -report
hdfs dfsadmin -safemode get

先确认连接到预期集群,再查看总容量、已用量、剩余量及存活、失联和维护中的 DataNode。集群总体有空闲并不保证每个节点都能继续承接块写入,应记录高水位节点及其磁盘情况。把计划退役和意外失联分开,对照维护窗口确认原因。安全模式若不符合预期,应先调查进入原因。

定位目录增长和配额压力

将路径占位符替换为已确认的业务目录,从有限范围开始:

hdfs dfs -du -s -h '/REPLACE_WITH_DATASET_PATH'
hdfs dfs -count -q -h '/REPLACE_WITH_DATASET_PATH'

du 输出应区分文件逻辑长度与实际存储消耗,不能把两列混用。目录配额不足与集群磁盘不足是不同问题。记录同一路径多个时间点的增量,联系业务确认新分区、重复导入、小文件增长及保留周期;快照占用也应纳入核查。容量预测使用环境实测增长率,并为复制恢复和计划维护保留空间,阈值由本集群策略确定。

检查块与副本健康

hdfs fsck '/REPLACE_WITH_DATASET_PATH'
hdfs fsck '/REPLACE_WITH_DATASET_PATH' -list-corruptfileblocks

将欠副本、放置不满足策略与缺失或损坏块分开处理。欠副本可能仍能读取,但冗余下降;出现缺失块需要立即确认受影响文件和业务。必要时对已定位的小范围目录使用 -files -blocks -locations 查块位置。命令语义见文末官方指南;本流程不使用 -delete-move 等修改参数。

按影响与恢复条件排序

先处理影响读取的数据缺失,再处理持续失联节点、容量瓶颈和冗余恢复。对欠副本持续不收敛的目录,核对可用节点、机架、存储类型与目标策略,避免在无法放置时重复提高副本数。对倾斜节点先收集分布与业务负载,再评估单独的均衡变更;清理数据必须明确目录归属、保留规则及可恢复来源。

巡检频率应覆盖业务导入高峰与维护结束后的恢复阶段。为日常汇总设置固定路径清单,对新增异常再逐步深入;不要把无限扩大扫描范围当成提高覆盖率。对同一文件反复出现的异常,关联节点与磁盘记录,保留首次出现时间及每次复查结果。

验收与停止条件

巡检产出应包含采样时间、集群身份、异常节点、受影响路径、责任人和复查时间。处置后复查相同范围,确认缺失块状态、冗余恢复趋势、容量余量及代表性文件读取结果。仅有 HEALTHY 不足以替代容量和冗余指标验收。若详细扫描增加 NameNode 压力,立即停止扩大范围;若出现新丢块或多节点异常,暂停退役、均衡等并发变更,转入事故处置。只读检查本身不需要数据回滚。

参考资料

从现象到判断

先收集证据,再缩小范围。以下是判读路径,不代表已经确认根因或获准变更。

  1. 集群总体仍有空间,但部分目录写入受限,或者个别 DataNode 长期处于高水位,容量告警持续出现。

    只读核对
    读取目标目录配额及逻辑、实际存储消耗,关联节点报告、机架和存储类型,比较同一路径多个时间点的增长。
    如何判读
    先区分目录限制与物理空间问题;若空间存在于不合格落点,不能按全群空闲量判断能够继续写入或恢复副本。
  2. 业务读取暂时成功,但欠副本或放置异常没有收敛,报告中伴随节点失联、维护或退役状态变化。

    只读核对
    在已批准的小范围路径读取块健康与必要位置明细,核对目标策略、异常节点及维护时间,不扩大成根目录扫描。
    如何判读
    数据暂时可读说明当前仍有可用来源,不代表故障冗余足够;持续异常应依据落点、容量与节点证据继续分类。
  3. 出现缺失或损坏块,受影响文件可能只集中在少量目录;与此同时,历史报表未明确这些异常是否早已存在。

    只读核对
    读取精确路径的损坏块清单及此前巡检记录,关联相应节点事件和业务已有读取错误,保持数据与服务现状不变。
    如何判读
    应先确认新旧异常和业务影响,再由数据负责人评估恢复来源;只读元数据检查不能代替文件内容的完整性结论。
常见误区与判断边界 2 项

把 HEALTHY 当作容量验收结论

块检查的状态回答其检查范围内的问题,不会替你判断增长速度、配额、快照和恢复所需空间。若只保留一个健康字符串,下一班无法知道检查了哪些目录。应同时保存路径范围和容量口径,并说明哪些数据未被业务读取或校验覆盖。

用降低冗余换取巡检表变绿

调整副本目标或清理不明目录会改变数据保护边界,而不是解释异常。尤其是机架不足、已有丢块或并发维护时,表面降低恢复需求可能掩盖风险。巡检只提供定位证据;均衡、退役、删除与策略变更都需要独立范围和恢复评估。

交接时应留下的证据

作为记录提纲使用,不是自动检查结果;未取得的证据应标记缺口,并注明负责人。

  • 记录 nameservice、认证读取范围、检查路径及采样时间,说明逻辑入口是否经过 ViewFS 或路由器以及实际后端范围。
  • 保存节点和机架容量、目录配额及存储策略的基线,分别标注普通副本与纠删码目录,说明快照和增长口径。
  • 列出欠副本、放置异常和缺失损坏块各自影响的路径,关联节点状态及首次出现时间,保留本轮与历史对照。
  • 交接业务已有读取结果、未覆盖目录、查询负载限制和复查负责人,明确哪些风险应暂停后续维护或数据清理。

记录需包含环境、版本、时间与时区;分享前脱敏,不附访问令牌、密码或完整业务敏感数据。

继续阅读与资料核对

补充相关主题,再结合当前环境的实施记录形成结论。

返回原理导读

DOUYA OPS ECOSYSTEM

贡献你的经验,帮助更多运维人

把故障复盘、标准流程和最佳实践沉淀为可检索、可复用的知识内容。