当前位置: 首页 > news >正文

Spark on YARN 的运行架构总览

 YARN(Yet Another Resource Negotiator ,另一种资源协调者 )的基本架构,基于此来讲讲 Spark on YARN 的运行架构:

1. 总体架构

YARN 是 Hadoop 生态系统中负责集群资源管理和调度的组件。Spark on YARN 是将 Spark 应用程序运行在 YARN 资源管理框架之上,利用 YARN 来管理和分配资源,让 Spark 应用程序能更高效地在集群中运行。

2. 主要组件及其功能

  • ResourceManager(资源管理器)
    • 功能:YARN 的全局资源管理器,负责整个集群的资源管理和分配。它接收来自各个 NodeManager 的资源汇报,以及客户端提交的应用程序请求,并为应用程序分配资源。在 Spark on YARN 中,它为 Spark 应用程序分配运行所需的容器(Container)资源。
    • 与其他组件交互:与 NodeManager 通信获取节点资源状态,与客户端交互接收应用提交请求,与 ApplicationMaster 协商资源分配。
  • NodeManager(节点管理器)
    • 功能:每个节点上的代理,负责管理本节点的资源(CPU、内存等)和容器生命周期。它接收 ResourceManager 的指令,启动、停止容器,监控容器资源使用情况,并向 ResourceManager 汇报节点状态和容器状态。在 Spark on YARN 中,它为 Spark 应用程序的执行分配和管理本地资源。
    • 与其他组件交互:向 ResourceManager 汇报节点状态;根据 ResourceManager 指令管理容器;与 ApplicationMaster 协作执行容器相关操作。
  • ApplicationMaster(应用程序主节点)
    • 功能:每个应用程序在 YARN 中的实例,负责与 ResourceManager 协商资源,获取到资源后与 NodeManager 通信,启动和监控容器。对于 Spark 应用程序,它负责启动 Spark 的 Driver 程序,协调 Executor 容器的启动和资源分配,监控任务执行进度等。
    • 与其他组件交互:向 ResourceManager 申请资源;与 NodeManager 交互启动和管理容器;与 Spark Driver 通信反馈任务执行状态。
  • Container(容器)
    • 功能:YARN 中资源的抽象,封装了一定量的资源(如 CPU、内存)。它是应用程序在节点上运行的环境,用于启动 ApplicationMaster 和 Executor 等进程。在 Spark on YARN 中,Executor 运行在 Container 中,负责执行具体的 Spark 任务。
    • 与其他组件交互:由 NodeManager 创建和管理,根据 ApplicationMaster 的指令启动和停止,运行具体的应用程序代码。

3. 运行流程

  1. 客户端提交应用:用户通过 Spark 客户端提交 Spark 应用程序到 YARN 集群,提交请求发送给 ResourceManager。

  2. ResourceManager 分配资源启动 ApplicationMaster:ResourceManager 收到请求后,为应用程序分配资源,在某个 NodeManager 上启动 ApplicationMaster 容器。

  3. ApplicationMaster 申请资源:ApplicationMaster 启动后,向 ResourceManager 注册,并根据应用程序需求向 ResourceManager 申请更多资源(Container)。

  4. NodeManager 启动容器:ResourceManager 根据资源情况分配 Container 给 ApplicationMaster,ApplicationMaster 与对应的 NodeManager 通信,让 NodeManager 启动包含 Spark Executor 的容器。

  5. 任务执行:Spark Driver 在 ApplicationMaster 中或单独的容器中运行,负责调度和监控任务,Executor 在各自容器中执行具体的 Spark 任务,完成数据处理。

  6. 任务完成:当所有任务执行完成,ApplicationMaster 向 ResourceManager 注销,释放资源,NodeManager 回收本地资源。

http://www.xdnf.cn/news/623629.html

相关文章:

  • 构建跨平台C/C++项目的基石:现代构建套件设计指南
  • Python包__init__.py标识文件解析
  • 操作系统的内核态和用户态场景
  • 最小均方误差(MMSE)滤波器及其改进版
  • skywalking 10.2 源码编译
  • Kafka Streams 和 Apache Flink 的无状态流处理与有状态流处理
  • 伴随矩阵 -- 代数余子式矩阵的转置
  • 【PostgreSQL】数据探查工具1.0研发可行性方案
  • 数据结构与算法——链式二叉树
  • 讲述我的PLC自学之路 第九章
  • P2089 烤鸡
  • 【Elasticsearch入门到落地】13、DSL查询详解:分类、语法与实战场景
  • Python模块中的私有命名与命名空间管理:深入解析与实践指南
  • 刷题 | 牛客 - js中等题-下(更ing)30/54知识点解答
  • DPDK QDMA 驱动详解 - tx
  • S32K开发环境搭建详细教程(二、添加S32K3xx SDK)
  • python语法学习
  • 第十五章:数据治理之数据目录:摸清家底,建立三大数据目录
  • stable diffusion论文解读
  • 再论自然数全加和-1
  • 09 接口自动化-用例管理框架pytest之allure报告定制以及数据驱动
  • WPF 全屏显示实现(无标题栏按钮 + 自定义退出按钮)
  • 爬虫核心概念与工作原理详解
  • Redis学习专题(五)缓存穿透、缓存击穿、缓存雪崩
  • ​《Nacos终极指南:集群配置+负载均衡+健康检查+配置中心全解析,让微服务稳如老狗!》​
  • SQLAlchemy 2.0 查询使用指南
  • python使用pycharm和conda 设置默认使用清华镜像
  • 枚举类扩充处理
  • 【Qt】Qt 5.9.7使用MSVC2015 64Bit编译器
  • 基于SamOutV8的序列生成模型实现与分析