1. 核心角色定位
HDFS(Hadoop Distributed File System)是Hadoop生态的分布式存储系统,聚焦海量数据的可靠存储,解决“数据存哪里、如何存”的问题;YARN(Yet Another Resource Negotiator)是Hadoop生态的资源管理与调度系统,聚焦集群计算资源的动态分配与任务调度,解决“计算资源如何分配、任务如何运行”的问题。两者共同构成Hadoop大数据处理的基础设施,实现“存储与计算分离”的架构设计。
2. 架构组件对应关系
- HDFS架构:采用主从(Master/Slave)模式,核心组件包括NameNode(主节点,管理文件系统元数据,如文件名、目录结构、数据块位置、副本数等)、DataNode(从节点,存储实际数据块,默认128MB/块,支持多副本容错)、SecondaryNameNode(辅助节点,定期合并NameNode的元数据镜像与操作日志,辅助元数据管理)。
- YARN架构:同样采用主从模式,核心组件包括ResourceManager(全局资源管理者,负责集群资源的全局分配与调度,接收应用提交请求,协调ApplicationMaster启动)、NodeManager(每个节点的代理,负责本节点资源监控(CPU、内存等)与Container生命周期管理,向ResourceManager汇报状态)、ApplicationMaster(特定应用的管理者,负责该应用的资源申请、任务调度与进度监控,协调Container执行具体任务)。
3. 协同工作机制
HDFS与YARN的协同以“数据存储在HDFS,计算由YARN调度”为核心逻辑,具体流程如下:
- 作业提交:用户通过客户端将MapReduce/Spark等计算作业提交至YARN的ResourceManager。
- 资源申请与分配:ResourceManager启动对应的ApplicationMaster(如MapReduce的ApplicationMaster),ApplicationMaster向ResourceManager申请运行作业所需的资源(Container,封装了CPU、内存等资源)。
- 任务执行:ResourceManager将资源分配给ApplicationMaster,ApplicationMaster在目标节点的NodeManager上启动Container,Container中运行具体的Map/Reduce任务。Map任务从HDFS读取输入数据(遵循“就近读取”原则,优先读取本地或同机架节点的数据),处理后将中间结果写回HDFS;Reduce任务从HDFS读取中间结果,进行汇总处理,最终将结果写回HDFS。
- 结果存储:作业执行完成后,最终结果持久化存储在HDFS中,供后续查询或分析使用。
4. 关键交互与依赖
- 数据依赖:YARN调度的计算任务(如MapReduce的Map/Reduce任务)需要从HDFS读取输入数据,并将中间结果或最终结果写回HDFS。HDFS的数据块位置信息(元数据)会被YARN的ApplicationMaster利用,以实现“数据本地化”调度(尽量将任务分配到存储数据的节点,减少网络传输开销)。
- 资源依赖:HDFS的运行依赖YARN的资源调度。例如,HDFS的**NameNode高可用(HA)功能需要YARN调度NameNode的备用节点(Standby NameNode),当主节点(Active NameNode)故障时,YARN会快速启动备用节点接管服务;HDFS的数据均衡(Balancer)**工具也需要YARN分配资源,以在DataNode之间均衡数据分布。
5. 优势互补
HDFS与YARN的分离设计带来了显著优势:
- 灵活性:YARN支持多种计算框架(如MapReduce、Spark、Flink等)运行在同一个集群上,只需适配YARN的接口即可,无需为每个框架单独搭建集群。
- 高资源利用率:YARN根据集群实时负载动态调整资源分配,避免资源闲置(如HDFS存储空闲时,可将资源分配给Spark进行计算)。
- 扩展性:HDFS的分布式存储架构支持水平扩展(增加DataNode),YARN的资源调度架构支持水平扩展(增加NodeManager),两者结合可应对PB级数据规模。