Spark源码解析(四)第一部分总结

1.Spark源码解析第一阶段总结:

在SparkContext类中有应用程序执行的三大核心组件,代码如下:

/**
 *  注释:第四步:创建任务调度TaskScheduler
 *  如果集群管理器是standalone模式:该方法返回(StandaloneSchedulerBackend,TaskSchedulerImpl)
 */
// Create and start the scheduler
val (sched, ts) = SparkContext. createTaskScheduler(this, master, deployMode)
_schedulerBackend = sched
_taskScheduler = ts
 
/**
 *  注释:第五步:创建和启动DAGScheduler
 *  1、内部初始化了一个:DAGSchedulerEventProcessLoop 用来处理各种任务
 *  2、在 DAGSchedulerEventProcessLoop 创建的时候,构造函数的内部的最后一句代码执行了 DAGSchedulerEventProcessLoop的启动。
 *  将来任务的提交,取消等,都会发送一个事件给 DAGSchedulerEventProcessLoop
 *  从而触发 dagScheduler.onRecevie() 的运行。
 */
_dagScheduler = new DAGScheduler(this)
_heartbeatReceiver.ask[Boolean](TaskSchedulerIsSet)
 
/**
 *  注释:第六步:TaskScheduler的启动,主要任务:backend.start()
 */
// start TaskScheduler after taskScheduler sets DAGScheduler reference in DAGScheduler's constructor
_taskScheduler.start()

1、TaskScheduler:提交Task

2、BackEnd:通信终端(SchedulerBackEnd存在于Driver里面,ExeutorBackEnd存在于Executor里面)

  • DriverEndpoint:spark application中的Task调度执行,负责和Worker打交道
  • ClientEndpoint:负责和Master打交道

3、DAGScheduler:构建DAG,并且进行DAG的stage划分

初始化成功后,就通过_taskScheduler.start()来启动,启动运行程序所需要的Driver和Executor

到此对一个Spark应用程序的完成执行流程已经了解一半,完整的如下:

1、编写 Spark Application 应用程序
2、打 jar 包,通过 spark-submit 提交执行
3、SparkSubmit 提交执行
4、执行 Spark Application 的 main 方法
5、初始化 SparkContext,这一步主要是把执行 Application 所需要的一个 Driver 和多个 Executor 启动起来
6、执行到 Action 算子,这个阶段会产生 DAG 血缘依赖关系,但是并么有真正执行
7、执行 Action 算子,生成一个 Job 提交执行
8、DAGScheduler 会对提交的 Job 进行 Stage 切分
9、TaskSchedule 通过 TaskSet 获取 job 的所有 Task,然后序列化分给 Exector

..........

RDD任务切分中间分为:Application、Job、Stage 和 Task

1、Application:初始化一个 SparkContext 即生成一个 Application;
2、Job:一个 Action 算子就会生成一个 Job;
3、Stage:Stage 等于宽依赖的个数加 1;
4、Task:一个 Stage 阶段中,最后一个 RDD 的分区个数就是 Task 的个数。

注意:Application->Job->Stage->Task每一层都是1对n的关系

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值