基于源码的SparkContext初始化动作解析

本文深入探讨SparkContext初始化过程,分析TaskScheduler如何启动与配置,包括TaskScheduleImpl的start方法及StandaloneSchedulerBackend的初始化。同时,介绍了DAGScheduler在依赖划分中的作用,以及SparkUI的相关设置,如端口和保留的stage、job数量。
摘要由CSDN通过智能技术生成

基于源码的SparkContext初始化动作解析

话不多说,首先附上,总体概览图(这个是spark2.10版本)新版本已经没有SparkDesploySchedulerBackend这个类了。
在这里插入图片描述

引入

刚刚接触到Spark的小伙伴,最开始一定会碰到写WordCount程序,或者一些自己的小Demo,每次写的时候都像套模板一样,之前一定要new SparkConf 然后把conf 传给SparkContext对象,那么SparkContext到底为我们做了什么呢?让我们来看看。

TaskScheduler

TaskScheduleImpl到底是个什么东东? 官方TaskSchedulerImpl.scala 的源码描述如下:

// 底层通过调用SchedulerBackend,针对不同种类的cluster(yarn,mesos,standalone),来调度task
// 它也可以通过使用LocalSchedulerBackend,并将参数isLocal设定为true,来在本地模式下工作
// 它可以处理通用逻辑,例如确定跨作业的执行顺序,以及推测任务执行等通用逻辑
// 客户端应该首先调用initialize()和start()方法,然后通过runTask()方法提交task sets
Schedules tasks for multiple types of clusters by acting through a SchedulerBackend. 
It can also work with a local setup by using a `LocalSchedulerBackend` and setting isLocal to true. 
It handles common logic, like determining a scheduling order across jobs, waking up to launch speculative tasks, etc. 
Clients should first call initialize() and start(), then submit task sets through the runTasks method.

哦,那就知道了,TaskSchedule就是调度task的,可以设定执行的模式,处理执行顺序,位置等内部逻辑。其中有初始化启动的动作,还有提交task sets的动作。那么在初始化调用start()方法的时候,具体做了什么呢?

TaskScheduleImpl 中的start方法,发现其实底层还是调用的SchedulerBackend的start方法。那么我们找到对应的SchedulerBackend的start方法。

override def start() {
   
  backend.start()
  if (!isLocal && conf.getBoolean("spark.speculation"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值