Spark的执行原理,本地Master模式, Yarn_cluster模式运行, Yarn_client模式运行, Yarn_cluster和Yarn_client的区别 14

本文详细介绍了Spark的不同部署模式,包括本地Master模式、Spark on Yarn的cluster和client模式。每种模式都提供了具体的命令行示例及执行流程,有助于读者理解Spark如何在不同环境下进行资源管理和任务调度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 本地Master负责调度资源

1.1 命令行

bin/spark-submit --class cn.spark.com.WordCountForHDFS \
--master spark:node01:8080 \
--executor-memory 1g \ //每个executor分配1g的内存
--total-executor-cores 4 \ //所有的executor加起来核数是4
/root/spark-root-1.0-SANPSHOT.jar \
/test.txt /out-spark-hdfs123

1.2 执行流程

在这里插入图片描述

  • 通过启动sparkContext(程序运行的main方法).向资源管理器注册, 并申请每个executor执行的内存, 以及总的executor和核数(spark的交互方式), 以下三种模式对应的资源管理器不同
    • master–> master
    • yarn–>resourceManager
    • mesos–>mesos
  • 资源管理器为每个数据的每个分区分配资源,并启动executor, executor汇报资源情况给资源管理器
  • sc 构建DAG–>DAG schedule 切割stages(taskSet)–>TASK schedule–> 提交task(脚本&.jar&参数) -->Executor executor向sc申请task
    • master–>task schedule
    • spark on yarn --> yarnClusterSchedule
  • tasks 在每个分区的executor中运行, 运行完毕释放资源

2. Spark on yarn_cluster模式

2.1 命令行

bin/spark-submit --class cn.spark.com.WordCountForHDFS \
--master yarn-cluster \
--executor-memory 1g \
--total-executor-cores 4 \
/root/spark-root-1.0-SNAPSHOT.jar 
/test.txt /out-spark-hdfs123v

2.2 运行流程

  • application master: SparkContext&executor)运行在application master中
  • application master是nodeManager向resourceManager申请下来的, 启动在nodeManager中.
  • 关闭client, 不影响application的运行
  • resourceManager负责分配资源,application master负责任务的分配
    在这里插入图片描述
  1. Spark Yarn Client向Yarn中提交应用程序, 包括ApplicationMaster程序,启动ApplicationMaster的命令, 需要在Execturo中运行的程序
    也就是Jar包和资源到hdfs
  2. Spark Yarn ClientRescourceManager提交请求.
  3. ResourceManager收到请求后, 在集群中选择一个NodeManager, 申请ApplicationMaster
  4. NodeManager启动ApplicationMaster, 用于分配后续任务的执行
  5. ApplicationMaster启动调度器, DAGSchedulerYarnClousterScheduler, ApplicationMaster调度任务其实本质上是这两个调度器在调度任务.
  6. ApplicationMaster启动后, 向ResourceManager申请Container, Container是真正执行任务的场所.
  7. ResourceManager接到了ApplicationMaster的请求,给NodeManager分配Container.
  8. NodeManager启动申请到的Container.
  9. YarnClousterSchedulerWorker分配工作.
  10. Spark的Worker, 启动Executor, Executor从hdfs上读取分片数据,执行任务.

3. Sparn on Yarn_client

3.1 命令行

bin/spark-submit \
--class cn.spark.com.WordCountForHDFS \
--master yarn_client \
--executor-memory 1g \
--total-executor-cores 4 \
/root/spark-root-1.0-SNAPSHOT.jar \
/test.txt \
/out-spark-hdfs123v

3.2 执行流程图解

  • Yarn_client模式中, Driver在客户端本地运行, 这种模式可以使得Spark Application和客户端进行交互.
  • 因为Driver在客户端, 所以可以通过webUI访问Driver的状态, 默认是http://node01:4040访问, 而Yarn通过http://node01:8088访问.
    在这里插入图片描述
  1. Spark Yarn Client 向 YARN 的 ResourceManager 申请启动 Application Master。同时在 SparkConten始化中将创建 DAGScheduler 和 TASKScheduler 等,由于我们选择的是 Yarn-Client 模式,程序会选YarnClientClusterScheduler 和 YarnClientSchedulerBackend;
  2. ResourceManager 收到请求后,在集群中选择一个 NodeManager,为该应用程序分配第一个 Contain要 求 它 在 这 个 Container 中 启 动 应 用 程 序 的 ApplicationMaster , 与 YARN-Cluster 区 别 的 是 在 ApplicationMaster 不运行 SparkContext,只与 SparkContext 进行联系进行资源的分派;
  3. Client 中的 SparkContext 初始化完毕后,与 ApplicationMaster 建立通讯,向 ResourceManager 注册根据任务信息向 ResourceManager 申请资源(Container);
  4. 一旦 ApplicationMaster 申请到资源(也就是 Container)后,便与对应的 NodeManager 通信,要在获得的 Container 中启动启动 CoarseGrainedExecutorBackend,CoarseGrainedExecutorBackend 启动后会Client 中的 SparkContext 注册并申请 Task;
  5. Client 中 的 SparkContext 分 配 Task 给 CoarseGrainedExecutorBackend 执 行 CoarseGrainedExecutorBackend 运行 Task 并向 Driver 汇报运行的状态和进度,以让 Client 随时掌握各个务的运行状态,从而可以在任务失败时重新启动任务;
  6. 应用程序运行完成后,Client 的 SparkContext 向 ResourceManager 申请注销并关闭自吉己

4. Yarn_client和Yarn_cluster区别

  • 理解Yarn_clientYarn_cluster深层次的区别之前先清楚一个概念: ApplicationMaster. 在Yarn, 每个Appliaction实例都有一个ApplicationMaster进程, 它是Application启动的第一个容器. AppMaster负责和ResourceManager打交道并且申请资源, 获取资源后告诉NodeManager为自己启动Container. 从深层次的含义将Yarn_clusterYarn_client模式的区别其实就是ApplicationMaster进程的区别.
  • Yarn_Cluster模式下,Driver运行在AM(ApplicationMaster)中, AM它负责向Yarn申请资源, 并监督作业的运行状况. 当用户提交了作业之后, 就可以关掉Client, 作业会继续在Yarn上运行, 因而Yarn_cluster模式不适合运行交互类型的作业.
  • Yarn_client模式下, ApplicationMaster仅仅向Yarn请求Executor, Client会和Container通信来调度工作, 因此Client不能关闭.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值