在yarn cluster模式下,提交应用后,是如何在集群的某个节点生成driver的,具体流程是什么

embedded/2025/3/31 18:08:55/

在 YARN Cluster 模式下,Spark 应用的 Driver 生成流程涉及多个关键步骤,其核心在于 Driver 作为 ApplicationMaster(AM)的一部分在集群中启动。以下是具体流程的详细解析:


1. 客户端提交应用

用户通过 spark-submit 脚本提交应用,指定 --deploy-mode cluster。此时:

  • SparkSubmit 主类解析参数,确定部署模式为 YARN Cluster,主类设置为 org.apache.spark.deploy.yarn.Client
  • 构建应用提交上下文,包括上传应用 JAR 文件、依赖库到 HDFS,并配置 AM 的启动命令(如 Java 路径、启动类 ApplicationMaster)。

2. ResourceManager 分配资源

  • 客户端通过 YarnClient 向 ResourceManager(RM)提交应用请求,RM 返回一个 Application ID 并分配第一个 Container(用于启动 AM)。
  • Container 启动命令指定了启动 AM 的 Java 进程,例如:
    java org.apache.spark.deploy.yarn.ApplicationMaster [用户参数]
    
    该命令会在选定的 NodeManager 节点上执行。

3. ApplicationMaster 启动与 Driver 生成

  • AM 在分配的 Container 中启动,并执行以下操作:
    • 初始化 SparkContext:AM 调用 startUserApplication 方法,启动一个新线程执行用户代码(即 --class 指定的主类),触发 SparkContext 初始化。此时,Driver 线程在 AM 进程中生成。
    • 注册 AM 到 RM:AM 向 RM 注册,以便用户可通过 RM 监控应用状态。
    • 申请 Executor 资源:AM 通过 RM 申请 Container 资源,每个 Container 对应一个 Executor。

4. Executor 启动与任务执行

  • NodeManager 启动 Executor:AM 与 NodeManager 通信,在分配的 Container 中启动 CoarseGrainedExecutorBackend 进程。
  • Executor 向 Driver 注册:Executor 启动后,与 AM 中的 Driver 通信完成注册,等待任务分配。
  • 任务调度与执行:Driver 通过 DAGSchedulerTaskScheduler 将任务拆分为 TaskSet,分发到 Executor 执行,并监控任务状态。

5. 应用结束与资源释放

  • 任务完成后,AM 向 RM 注销应用,释放所有 Container 资源。
  • 日志与状态反馈:最终状态通过 YARN 的日志聚合机制查看,客户端不会直接显示结果(适合输出到 HDFS 等外部存储的场景)。

关键流程对比

步骤YARN Cluster 模式特点
Driver 位置在 AM 进程中运行,由集群动态分配节点。
客户端角色仅提交任务,不参与任务执行或结果收集。
容错机制若 AM(即 Driver)失败,YARN 会尝试重启 AM(需配置 spark.yarn.maxAppAttempts)。

示例代码与命令

提交 YARN Cluster 模式应用的典型命令:

spark-submit \--master yarn \--deploy-mode cluster \--class org.apache.spark.examples.SparkPi \examples/jars/spark-examples.jar \1000

此命令会触发上述完整流程,最终在集群的某个 NodeManager 上生成 Driver。


总结

YARN Cluster 模式下,Driver 的生成本质是 通过 AM 进程在集群中动态启动用户代码并初始化 SparkContext。这种设计使得 Driver 生命周期由 YARN 管理,适合生产环境中需要高可靠性和资源调度的场景。


http://www.ppmy.cn/embedded/176597.html

相关文章

FPGA中级项目3——IP核之时钟管理单元

FPGA中级项目3——IP核之时钟管理单元 时钟还需要管理?什么是时钟管理单元? 我们常熟知FPGA本身有晶振单元,源源不断的提供的50Mhz的频率波。但是这样往往无法满足一些设计需求。使用Verilog代码设计倍频分频等又不可避免的出现毛刺等其他状况,且提升了代码复杂度。因此在 …

【STM32实物】基于STM32的太阳能充电宝设计

基于STM32的太阳能充电宝设计 演示视频: 基于STM32的太阳能充电宝设计 硬件组成: 系统硬件包括主控 STM32F103C8T6、0.96 OLED 显示屏、蜂鸣器、电源自锁开关、温度传感器 DS18B20、继电器、5 V DC 升压模块 、TB4056、18650锂电池、9 V太阳能板、稳压降压 5 V三极管。 功能…

BFS解决FloodFill算法

1.图像渲染 733. 图像渲染 - 力扣(LeetCode) 1.题目解析 有一幅以 m x n 的二维整数数组表示的图画 image ,其中 image[i][j] 表示该图画的像素值大小。你也被给予三个整数 sr , sc 和 color 。你应该从像素 image[sr][sc] 开始对图像进行…

xss-labs第八、九关卡以及XSS GAME的Ok,Boomer关卡

第八关 靶场代码 <!DOCTYPE html><!--STATUS OK--><html> <head> <meta http-equiv"content-type" content"text/html;charsetutf-8"> <script> window.alert function() { confirm("完成的不错&#…

探索 Ollama:开源大语言模型平台的无限可能​

在人工智能的快速发展进程中&#xff0c;大语言模型扮演着至关重要的角色。Ollama 作为一个开源的大语言模型平台&#xff0c;正逐渐崭露头角&#xff0c;为广大开发者和爱好者带来了全新的体验。它允许用户在本地环境中轻松地运行、创建和共享大型语言模型&#xff0c;极大地降…

【Dive Into Stable Diffusion v3.5】2:Stable Diffusion v3.5原理介绍

【Dive Into Stable Diffusion v3.5】系列博文&#xff1a; 第1篇&#xff1a;开源项目正式发布——深入探索SDv3.5模型全参/LoRA/RLHF训练第2篇&#xff1a;Stable Diffusion v3.5原理介绍 目录 1 前言1.1 扩散模型的原理1.2 损失函数1.3 加噪流程1.4 推理流程1.5 negative pr…

PL/SQL语言的扩展运算符

PL/SQL语言的扩展运算符应用 PL/SQL&#xff08;Procedural Language/Structured Query Language&#xff09;是Oracle数据库中用于过程性编程的语言。它在SQL的基础上&#xff0c;增加了程序控制结构&#xff08;如条件语句、循环语句等&#xff09;、异常处理以及与数据库交…

Java设计模式之访问者模式

概念 访问者模式是一种行为设计模式&#xff0c;允许在不修改已有代码的情况下&#xff0c;动态地添加新的操作到对象结构中。它将数据结构与操作解耦&#xff0c;使得可以独立地定义作用于复杂对象结构的操作。 作用 访问者模式的主要作用是解决在一个对象结构上定义多个操…