spark内核揭秘-09-RDD的count操作 触发Job全生命周期-02
spark内核揭秘-09-RDD的count操作 触发Job全生命周期-02
stark_summer 发表于3年前
spark内核揭秘-09-RDD的count操作 触发Job全生命周期-02
  • 发表于 3年前
  • 阅读 99
  • 收藏 3
  • 点赞 1
  • 评论 2

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: spark内核揭秘-09-RDD的count操作 触发Job全生命周期-02 spark内核揭秘-09-RDD的count操作 触发Job全生命周期-02 spark内核揭秘-09-RDD的count操作 触发Job全生命周期-02 spark内核揭秘-09-RDD的count操作 触发Job全生命周期-02

接着上一篇文章继续分析代码:

3.1.3.3.3.1、进入TaskSet 方法:


3.1.3.3.3.2、进入taskScheduler.submitTasks(new TaskSet(tasks.toArray, stage.id, stage.newAttemptId(), stage.jobId, properties)) 方法:



从源代码中可以看出DAGScheduler中向TaskScheduler以Stage为单位提交任务,Stage是以TaskSet为单位的,构建一个TaskSetManager,当isLocal=false(集群模式)& hasReceivedTask=false(没启动的),将会创建一个定时任务来监控worker集群是否启动,并且是15000毫秒后启动,并间隔15000毫秒继续循环运行

3.1.3.3.3.3、进入 backend.reviveOffers() 方法:


该方法是 CoarseGrainedSchedulerBackend的方法,此时会向driverActor发送ReviveOffers消息,driverActor的实现代码如下:


此时跟踪进DriverActor的实现中:






可以看到ReviveOffers消息的具体实现是makeOffers方法:


WorkerOffer对象代表是某个Executor上可用的资源,freeCores(id)是该executor上空余的CPU数目:


进入launchTasks:



executorActor发送启动Task的请求,其实是向CoarseGrainedExecutorBackend发送LaunchTask消息:





在LaunchTask消息中会导致executor.lauchTask(this, taskDesc.taskId, taskDesc.name, taskDesc.serializedTask)的调用:


其中的TaskRunner封装了任务本身:



任务执行的是交给了线程池去执行的。 其实这些代码已经分析过了,在之前的博客中

我们在回到SparkContext:


4、进入progressBar.foreach(_.finishAll())方法:


5、进入rdd.doCheckpoint()方法


进入checkpointData.get.doCheckpoint()方法:



共有 人打赏支持
粉丝 59
博文 75
码字总数 51050
评论 (2)
-悟空-
赞一个~~~,岳哥,你这最近写了好多啊。
stark_summer

引用来自“-多啦A梦-”的评论

赞一个~~~,岳哥,你这最近写了好多啊。

加油学习步伐
×
stark_summer
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: