Spark提交流程

在这里插入图片描述

① 打包程序为 `xxx.jar`,上传到某个节点上
② 执行一个 `SparkSubmit` ,在SparkSubmit中,会写各种配置信息(--master、CPU、内存)

③ 以 `client` 模式为例,会在提交的节点上启动一个 driver进程

④ Driver就是我们的 `application`,Wordcount

⑤ 创建 `SparkContext` 对象,会在内部创建(`DAGscheduler`,`Taskscheduler`)

⑥ 在driver中,代码如果遇到了 `action` 算子,就会创建一个 job(即Spark程序中有多少个action,就会产生多少个job)

⑦ `DAGscheduler` 会接收 job,为job生成DAG(有向无环图)

⑧ 把DAG划分为 Stage

⑨ 把 Stage 里面的 task 切分出来,生成 taskSet

⑩ 接收taskSet后调度task

⑪ taskScheduler里面会有一个后台进程,去专门连接 Master,向Master注册(申请资源,如CPU,内存、磁盘)

⑫ master 接收到 driver 端的注册

⑬ 结合需要的资源和本身空闲的资源,利用资源调度算法来决定在哪些worker上运行我们的这个application。

⑭ master通知 worker 启动 executor(worker中包含有 executor、线程池、taskRunner)

⑮ worker 启动 executor(executor使用资源CPU+内存)

⑯ executor 反向注册 driver 里面的 taskScheduler

⑰ driver中的 taskScheduler 接收到 executor 的反向注册,把 taskSet中的task发送到 executor

⑱ worker中的 taskRunner(执行task)接收到一个序列化文件,先反序列化拷贝等,生成task,task里面有 rdd 的执行算子和一些方法需要的常量。executor 接收到很多的task,每接收到一个 task都会从线程池里面获取一个线程,用taskRunner来执行task。

⑲ task分为 shuffleMapTask和resultTask,最后一个stage对一个的task就是resultTask,之前所有的stage对应的task都是shuffleMapTask。如果spark程序执行的是 shuffleMapTask,那么程序在执行完这个stage之后,还需要继续执行下一个 stage

⑳ spark程序,就是stage被切分为很多 task,封装到 taskSet 里面,提交给 executor执行,一个stage一个stage执行,每个task对应一个rdd的Partition(分区),这个task执行的就是我们写的算子操作,最后知道最后一个stage执行完。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 答:Spark提交到Yarn的流程主要包括以下几个步骤:1.运行Spark应用程序;2.将Spark应用程序打包成jar或zip文件;3.使用spark-submit命令提交应用程序到Yarn;4.Yarn接收应用程序并将其分配给节点;5.Yarn调度器负责调度应用程序;6.Yarn监控应用程序的执行;7.应用程序结束时,Yarn将结果发送给用户。 ### 回答2: 将Spark程序提交到YARN的流程如下: 1. 准备YARN集群:首先需要搭建一个YARN集群,包括至少一个YARN管理节点(ResourceManager)和多个YARN工作节点(NodeManager)。ResourceManager负责整个集群的资源分配和任务调度,NodeManager负责执行具体的计算任务。 2. 准备Spark程序和配置:将要运行的Spark程序编写好,并进行必要的配置。Spark程序可以使用Scala、Java或Python等语言编写,配置文件可以设置Spark应用的相关参数,如内存分配、并行度等。 3. 打包Spark应用程序:将编写好的Spark程序及其依赖库打包成一个可执行的Jar包,以方便在YARN上运行。 4. 提交Spark应用到YARN:使用YARN提供的命令或客户端工具,将打包好的Spark应用程序提交到YARN集群。在提交时,需要指定应用程序的配置信息,如所需的资源、启动脚本、提交人等。 5. YARN任务调度:一旦Spark应用程序被提交到YARN集群,YARN的ResourceManager会对其进行资源分配和任务调度。根据应用程序的需求,ResourceManager会为其分配合适的资源,并确定在哪些节点上启动相应的任务。 6. 启动Spark任务:YARN的NodeManager接收到Spark任务后,负责启动Executor进程。每个Executor进程是一个独立的Java进程,负责执行Spark应用程序的具体计算任务。 7. 执行Spark应用程序:一旦Executor进程启动,Spark应用程序开始在YARN集群上执行。Executor会根据应用程序的逻辑,调度并执行具体的计算任务,包括读取数据、转换处理等操作。 8. 监控和管理:在Spark应用程序执行的过程中,可以通过YARN提供的监控工具来查看任务的运行状态、资源使用情况等。此外,还可以通过YARN的管理命令对任务进行调度、监控和管理。 9. 完成和收集结果:一旦Spark应用程序执行完毕,可以从YARN集群上收集各个任务的输出结果。根据需要,可以将结果存储到HDFS、本地文件系统或其他存储介质中。 以上是将Spark程序提交到YARN的基本流程,通过YARN的资源管理和任务调度,可以有效地管理和利用集群资源,并实现分布式的Spark计算。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值