架构设计 · 大数据运维

待环境验证

Hadoop 架构基础:HDFS、YARN 与计算链路

理解 HDFS 存储、YARN 调度和计算引擎的责任边界,用有限入口检查与应用时间线建立 Hadoop 集群的架构认识。

Hadoop大数据
阅读导引 · 理解后再操作

这篇知识解决什么问题

本篇先建立 HDFS 存储、YARN 调度与计算引擎的责任边界,再用一次文件访问和一次作业时间线解释故障影响。重点是把症状映射到下一份有用证据,避免由进程名称、客户端安装情况或总容量推断整个系统健康。

先分清谁保存数据、谁分配资源

NameNode 管理路径与块映射,DataNode 保存数据,YARN 负责资源分配,计算引擎执行具体任务。把这几个职责分开,才能解释同机部署时为何一个服务正常不能代表整台机器上的业务链路正常。

按应用阶段理解等待

提交、Driver 或 AM 启动、任务计算和输出可见属于不同阶段。采样先对齐应用 ID 与时间窗,再判断延迟发生在哪段;计算尚未启动时调整 SQL 算子通常无法解释调度等待。

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

借用 Hadoop 集群运维图观察客户端、存储节点、调度器和计算作业的关系。图是逻辑参考,没有表达每个机架与共享网络故障域,也不证明已启用 HA 或客户端 failover;实际入口与部署模式需要现场配置补齐。

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

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 篇官方资料

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

适用范围与学习目标

本文以 Apache Hadoop 3.4.1 的 HDFS 与 YARN 为基线,面向需要读懂集群拓扑、作业链路和故障影响的新成员。发行版可能改变目录、服务名和默认配置,现场应以实际版本、有效配置与部署清单为准。文中命令是待环境验证的只读示例,本文没有连接或验证真实集群,验证状态保持 PENDING。

学习目标是能把一次文件读取、一次计算提交和一次节点故障分别映射到责任组件。Hadoop 不是单个查询数据库;HDFS 提供文件存储,YARN 分配计算资源,MapReduce、Spark 等引擎负责计算。安装了 Hadoop 客户端也不意味着作业一定写入 HDFS,必须确认 URI 和实际存储连接器。

先划分存储、调度与计算职责

  • 文件元数据:主要组件:NameNode;需要回答的问题:路径是否存在、权限是什么、数据块在哪里。
  • 文件数据:主要组件:DataNode;需要回答的问题:块是否可读、磁盘是否健康、冗余是否足够。
  • 资源调度:主要组件:ResourceManager、NodeManager;需要回答的问题:队列是否允许、容器放在哪里、资源是否可用。
  • 应用执行:主要组件:ApplicationMaster、计算引擎进程;需要回答的问题:哪个任务运行、失败如何重试、结果如何提交。

YARN 中 ResourceManager 负责全局资源仲裁,NodeManager 管理节点上的容器,ApplicationMaster 为具体应用协调执行。容器表示获分配的资源与执行环境,并不必然是 Docker 容器。HDFS 和 YARN 可以部署在相同机器上,但服务健康及资源瓶颈需要分开判断。职责依据 Hadoop 3.4.1 YARN 架构

从一次 HDFS 读取理解数据流

客户端先向 NameNode 请求文件元数据与块位置,再从 DataNode 获取数据;文件内容不经 NameNode 转发。因而“列目录很慢”和“顺序读取很慢”需要不同证据:前者优先关联元数据 RPC、权限和目录规模,后者还要看数据节点、网络及文件布局。

写入时,客户端依据 NameNode 分配的目标建立 DataNode 数据管道。副本数量与放置策略影响可用性和网络成本,不能把节点数量直接等同于故障域数量。采用纠删码的目录还要单独核实策略,不能用副本文件的容量公式解释所有数据。基础流程见 HDFS 架构

从一次作业提交理解资源等待

业务提交应用后,YARN 需要为 ApplicationMaster 和执行任务安排资源。作业等待不一定意味着集群没有空闲:队列约束、用户限制、节点标签及单容器请求规格都可能阻止放置。计算引擎拿到容器后仍可能等待数据、依赖服务或下游提交,不能把整个耗时都记为调度延迟。

排查时保留 application ID,并把提交、AM 启动、首个任务开始、计算完成、结果可见五个时间点分开。若应用尚未进入实际计算,继续分析 SQL 算子或增大执行并行度通常没有针对性。详细流程可接着阅读 YARN 应用排队与资源瓶颈排查

用有界只读检查确认实际入口

先从部署清单取得 nameservice、业务目录和应用 ID,替换占位符后再由操作人员按本地权限执行:

hdfs version
hdfs getconf -confKey fs.defaultFS
hdfs dfs -stat '%F %b %r' 'hdfs://REPLACE_WITH_NAMESERVICE/REPLACE_WITH_ONE_FILE'
hdfs dfsadmin -safemode get

fs.defaultFS 表明未显式指定 URI 时的默认入口;显式 URI 可以覆盖它,因此两者均要核对。stat%F%b%r 分别用于查看对象类型、文件字节数和副本数,示例只针对一份已知的副本存储文件。目录不是文件大小样本;纠删码文件也不能由 %r 推导真实冗余。安全模式结果描述 NameNode 状态,不等同于完整健康报告。命令定义见 Hadoop 文件系统 Shell

将症状映射为下一份证据

  • 已知路径不存在:优先查看:URI、目录归属、发布与删除记录;不能直接得出的结论:HDFS 丢块。
  • 目录可见但文件读取失败:优先查看:对应块和 DataNode、客户端网络;不能直接得出的结论:NameNode 必须重启。
  • 应用长时间未启动任务:优先查看:AM 状态、队列与请求资源;不能直接得出的结论:SQL 本身低效。
  • 多个应用同时读慢:优先查看:数据节点与网络的同窗指标;不能直接得出的结论:扩容内存即可恢复。

这是一套收窄调查范围的方法,不是自动根因判定。对照同时间窗的正常目录或正常应用,可以避免把一份异常客户端配置解释成集群故障。每份证据都记录采样时间、目标身份和工具版本,访问被拒绝时保留原始错误,不将缺失数据填成健康值。

高可用与数据保护分别解决什么

NameNode 高可用降低元数据服务中断风险;DataNode 冗余保护块的可读性;备份和恢复流程处理误删除、损坏与跨故障域灾害。这三件事需要分别验收。副本可以同步保留错误写入,HA 也不能自动撤销业务删除。

SecondaryNameNode 不是可以直接接管的热备。在 QJM HA 部署中,Standby NameNode 跟踪共享 edits,自动切换还依赖 ZooKeeper 与 ZKFC 等机制。不要从进程名称推断已有可靠 HA。拓扑确认后再阅读 Hadoop 高可用与恢复规划,容量和块健康则使用 HDFS 容量与副本健康巡检

常见误区与容量认识

第一,把 HDFS 当作适合大量随机小更新的本地文件系统。文件布局和访问模式影响性能,应用应明确是否以追加、批处理和分区读取为主。第二,认为磁盘剩余很多就没有扩容压力;大量文件和块还会增加 NameNode 元数据负担。第三,用“一台机器几个服务”绘图,却没有标出机架、网络和供电故障域,容易高估冗余效果。

容量计划同时记录逻辑数据量、物理存储、文件和块增长、恢复期间额外空间,以及计算高峰的资源需求。本文不提供通用安全百分比:保留余量应依据增长曲线、退役计划和恢复窗口制定。小文件问题另见 Hadoop 小文件治理

验收、停止条件与回退边界

学习与巡检产出应包括一张实际入口图、组件责任表、代表性文件的读取链路和一个作业的阶段时间线。能解释“哪个组件失败会影响哪段业务”才是验收目标;只列出进程名称不够。命令结果只覆盖采样对象,不能宣告整个集群已验证。

只读检查没有数据回滚步骤;若扩大目录检查造成元数据延迟,应停止扩面并保留已有证据。涉及切换、清理、扩容和队列修改时,要在独立变更中定义恢复路径与业务验收,不把架构学习中的推断直接转成运行操作。

参考资料

从现象到判断

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

  1. 同一用户在不同客户端访问同一路径时结果不同,只有部分客户端提示不存在或无权限。

    只读核对
    核对显式 URI、fs.defaultFS、客户端版本与身份,并比对同一已知文件的有限元数据。
    如何判读
    入口与身份差异可能解释问题;文件不可见不能直接等同于集群丢块。
  2. 目录操作正常,但读取已知文件失败,同窗其他目录仍然可读。

    只读核对
    将该文件的块位置与数据节点、客户端网络和已有读取错误关联,保持限定路径。
    如何判读
    证据将范围收窄至数据读取链路;NameNode 可响应不能证明相关 DataNode 可读。
  3. 应用已经提交,却很久没有出现实际计算任务,集群总览仍显示有空闲资源。

    只读核对
    对照 AM 状态、队列约束、请求规格与节点放置条件,记录首个任务开始时间。
    如何判读
    总体空闲不等于请求可放置;继续按调度条件排查,不能先判定计算算法低效。
常见误区与判断边界 2 项

把 YARN 容器直接等同于 Docker

YARN 容器首先表示获分配资源与执行环境,具体是否使用容器运行时取决于部署。仅凭页面中的 container ID 推断 Docker 故障会把调查引向错误组件。

把冗余、高可用和备份合并验收

块冗余、元数据服务切换和误删除恢复处理的风险不同。应分别记录各自的恢复证据,不能以副本数或两个 NameNode 证明业务数据能够恢复。

交接时应留下的证据

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

  • 记录实际 nameservice、显式 URI、客户端版本与身份,明确样本是副本文件还是采用其他存储策略。
  • 保存存储、调度与计算组件的责任映射及真实故障域,标出图中未覆盖的部署差异。
  • 保留一个文件的有限检查与一个应用各阶段时间点,把等待、计算和结果发布拆开。
  • 交接症状对应的下一层证据、未知项目和停止条件,保持未验证环境的 PENDING 状态。

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

继续阅读与资料核对

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

返回原理导读

DOUYA OPS ECOSYSTEM

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

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