YARN与Spark组件架构关系及交互机制:从ResourceManager到Executor的层级、依赖与通信链路解析

一、架构层级与包含关系

1. YARN 基础架构(资源管理层)
ResourceManager(RM)
└── 管理所有NodeManager(NM)
    └── 每个NM管理多个物理节点
        └── 每个节点上运行Container(逻辑资源单元)
            ├── 分配固定内存/CPU资源
            └── 运行具体进程(如AM、Executor)
2. Spark 应用运行时组件(计算层)
ApplicationMaster(AM)
├── 运行在独立Container中(由RM分配)
├── 管理Driver和Executor
│   ├── Driver(作业调度核心)
│   │   └── 运行在AM的子Container中(yarn-cluster模式)
│   └── Executor(任务执行单元)
│       ├── 每个Executor运行在独立Container中
│       └── 包含多个Task线程
3. 核心组件映射表
组件 所属系统 运行位置 依赖关系
ResourceManager YARN 集群主节点 管理所有 NM 和应用 AM
NodeManager YARN 集群工作节点 受 RM 调度,管理本地 Container
ApplicationMaster Spark/YARN NM 上的 Container 由 RM 启动,管理 Spark 应用
Container YARN NM 节点 封装资源,运行 AM/Executor
Driver Spark 客户端或 AM 的 Container 由 AM 启动(cluster 模式)
Executor Spark NM 的 Container 由 AM 申请资源后启动

二、运行时依赖关系

1. yarn-cluster 模式(Driver 在集群内)

YARN与Spark组件架构关系及交互机制:从ResourceManager到Executor的层级、依赖与通信链路解析_第1张图片

2. yarn-client 模式(Driver 在客户端)

YARN与Spark组件架构关系及交互机制:从ResourceManager到Executor的层级、依赖与通信链路解析_第2张图片

三、通信链路与职责关联

1. YARN 组件间通信(RM 与 NM)
  • RM → NM:通过ResourceRequest分配 Container 资源,通过ContainerLaunchContext指定启动参数
  • NM → RM:通过心跳汇报节点状态(资源使用、Container 运行情况),接收 RM 的指令
2. Spark 与 YARN 交互(AM 为桥梁)
  • AM → RM:注册应用、申请 Executor 资源、汇报应用状态
  • AM → NM:发送StartContainer命令启动 Executor
  • Driver → Executor:通过 Akka RPC 分发 Task、接收任务结果
  • Client → AM(仅 client 模式):获取应用状态、日志信息
3. 关键依赖示例
  • AM 的双重角色:既是 YARN 的 ApplicationMaster,又是 Spark 的 Driver 启动器(cluster 模式)
  • Container 的资源隔离:每个 Executor 在独立 Container 中运行,避免资源竞争
  • RM 的全局管控:所有组件(AM、Executor)的资源均由 RM 统一调度,NM 负责本地执行

四、总结:核心关系速记

  1. YARN 是资源管理者:RM 统筹全局资源,NM 管理节点资源,Container 是资源分配的最小单位
  2. AM 是桥梁:在 YARN 中代表 Spark 应用,负责向 RM 申请资源,启动 Driver 和 Executor
  3. Driver 与 Executor 是计算核心:Driver 调度任务,Executor 执行任务,均运行在 YARN 的 Container 中
  4. 运行位置差异:cluster 模式下 Driver 在 AM 的 Container 中,client 模式下 Driver 在客户端进程

你可能感兴趣的:(Spark,spark,架构,大数据,分布式)