spark主流程源码分析

本文详细解析了Spark任务从提交到执行的全过程,包括spark-submit命令的使用、SparkContext的初始化、任务资源调度及DAG调度器的工作原理。深入探讨了任务如何被划分为不同stage,以及Spark在集群中如何通过ActorSystem进行通讯和资源调度。

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

1、spark 任务提交过程首先调用sprark-submit函数
例子为 :

bin/spark-submit --class org.apache.spark.examples.SparkPi  --master spark://node-1.itcast.cn:7077 --executor-memory 2g --total-executor-cores 4

该命令主要调用相应脚本下着 这个主类
在这里插入图片描述
然后再源码的bin 中调用命令
exec “RUNNER"−cp"RUNNER" -cp "RUNNER"cp"CLASSPATH” JAVAOPTS"JAVA_OPTS "JAVAOPTS"@"

启动源码中的 org.apache.spark.deploy.SparkSubmit 类中 -》submit -》 doRunMain (args class cn.itcast.spark.WordCount …)
通过反射的方式启动 启动传给程序的主类然后启动( Class.forName通过反射调用自定义类的main方法 org.apache.spark.examples.SparkPi 程序)

2、程序进入主程序后 此时进入主程序代码
(1)sparkcontext 初始化运行所需的所有环境(环境初始化、任务资源调度等)
(2)然后就是下面代码分(最后会被切成不同stage 不同stage依次提交其下下的多个任务)
在这里插入图片描述

3、sparkcontext 中初始化环境步骤(这里面是任务运行调度的全部 ) 欢迎留下不同意见

new sparkcontext ()会调用sparkcontext 的主构造器。
(1)首先主构造器中会创建单例ActorSystom 主要作用是为后期集群master 和work excuter 等之间通讯都要通过他
在这里插入图片描述

(2)、创建TaskScheduler ,其中包含了根据不同的spark 调度模式(yarn、local、standAlone )创建调度器。(fifo 和公平调度器等)

(3)、创建DAG调度器,器主要根据任务映射的有向无环图做stage 阶段的划分。(todo 下面源码继续)

(4)、taskScheduler.start : 任务调度器开始,其实现的功能 通过第一步的ActorSystem 创建 driveActor 和AppClient 然后实现 Appcient段和master work 服务器节点通讯和excuter work 和 drive之间进行通讯等。然后通过

在这里插入图片描述

通过
在这里插入图片描述

向master 发送注册消息 此时 需要跳的 master.scla 类的 RegisterApplication 方法内容如下
在这里插入图片描述
其中他做的几件事主要是:

1、首先把应用的信息放到内存中存储
2、master 向 clintActor发送注册成功的消息
3、Master开始调度资源(其实就是把任务启动到哪些Worker上)

其中 schedule 方法中 具体给出了任务分配到资源的方式,Master发送消息给Worker,把参数通过case class传递给Worker,让他启动Executor,

在这里插入图片描述

通过如下方法进行excuter的构建 然后进入ExecutorRunner的主构造器start 方法启动子线程启动excutor的线程,然后并完成对driver的注册,并启动线程池(默认为newDaemonCachedThreadPool)

注意:启动线程池的作用是等待任务划分完后将任务扔入到线程池中
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值