![](https://img-blog.csdnimg.cn/20190118115831443.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
实习第四天之spark源码学习
持续更新spark源码学习进度,大家共勉!
caibaoli
-Github用户名caibaoli
-一直觉得名字是一个人的标签,想了好久,还是努力把本名做成标签,倒过来会更有趣些
展开
-
spark2.11-2.3源码12_Shuffle源码
ShuffleWriter上面是使用哪种 writer 的判断依据, 是否开启 mapSideCombine 这个判断,是因为有些算子会在 map 端先进行一次combine, 减少传输数据。 因为 BypassMergeSortShuffleWriter会临时输出Reducer个(分区数目)小文件,所以分区数必须要小于一个阀值,默认是小于200。UnsafeShuffleWriter...转载 2019-01-22 17:17:42 · 225 阅读 · 0 评论 -
spark2.11-2.3源码11_task源码
TaskRunnerclass TaskRunner( execBackend: ExecutorBackend, private val taskDescription: TaskDescription) extends Runnable { val taskId = taskDescription.taskId val threadName ...原创 2019-01-21 11:21:27 · 191 阅读 · 0 评论 -
spark2.11-2.3源码10_executor源码
CoarseGrainedExecutorBackendworker中为application启动的executor,实际上是启动了这个CoarseGrainedExecutorBackend进程首先初始化onStart override def onStart() { logInfo("Connecting to driver: " + driverUrl) ...原创 2019-01-21 09:38:02 · 117 阅读 · 0 评论 -
spark2.11-2.3源码9_TaskSchedule源码
接上submitTaskssubmitTasks//TaskSchedule的入口 override def submitTasks(taskSet: TaskSet) { val tasks = taskSet.tasks logInfo("Adding task set " + taskSet.id + " with " + tasks.length + " tasks"...原创 2019-01-20 16:03:07 · 133 阅读 · 0 评论 -
spark2.11-2.3源码8_DAGSchedule源码
调用action操作,进入dagScheduler.runJob,接着submitJob,有eventProcessLoop.post(JobSubmitted(),JobSubmitted里dagScheduler.handleJobSubmittedhandleJobSubmitted//DAGScheduler的job调度的核心入口 private[scheduler] de...原创 2019-01-20 14:30:17 · 127 阅读 · 0 评论 -
spark2.11-2.3源码7_job工作原理
例如wordcount程序SparkContent中textFile(生成rdd开始)//方法的调用会创建一个会创建hadoopRDD,其中的元素,其实是(key,value) pair//key是hdfs或文本文件的每一行的offset,value就是文本行,然后对HadoopRDD调用map()方法,会剔除key,只保留value,然后会获得一个MapPartitionsRDD,MapPa...原创 2019-01-19 20:45:41 · 94 阅读 · 0 评论 -
spark2.11-2.3源码6_worker工作原理
LaunchDriver//管理一个driver的执行case LaunchDriver(driverId, driverDesc) => logInfo(s"Asked to launch driver $driverId") val driver = new DriverRunner( conf, driverId, ...原创 2019-01-19 19:52:34 · 152 阅读 · 0 评论 -
spark2.11-2.3源码5_资源调度schedule(driver和worker的分配启动)
scheduleprivate def schedule(): Unit = { //首先判断,master状态不是ALIVE的话返回,也就是说standby master不会进行 if (state != RecoveryState.ALIVE) { return } // Drivers take strict precedence over ex...原创 2019-01-18 11:49:22 · 239 阅读 · 0 评论 -
active状态与standby状态区别
spark集群一般为一个master和两个slaves,通常情况下,master是active状态,slaves是standby状态。active状态意味着提供服务,standby状态意味着处于休眠状态,只进行数据同步,时刻准备着提供服务,两者可以切换。...原创 2019-01-18 09:27:06 · 9426 阅读 · 0 评论 -
spark2.11-2.3源码4_Master状态改变
DriverStateChanged case DriverStateChanged(driverId, state, exception) => state match { //如果driver状态是ERROR\FINISHED\KILLED\FAILED ,removeDriver case DriverState.ERR...原创 2019-01-17 15:39:53 · 165 阅读 · 0 评论 -
spark2.11-2.3源码3_Master注册机制
处理Master注册的请求case RegisterApplication(description, driver) => // TODO Prevent repeated registrations from some driver //如果当前master是StandBy Master,不是Active Master,那什么都不会做,如果是其他ALIVE(这是是...原创 2019-01-17 11:50:48 · 127 阅读 · 0 评论 -
spark2.11-2.3源码2_Master主备切换
MasterActive Master挂掉切换到Standby Master,完成Master主备切换,就是完成Master的恢复private def completeRecovery(){//如果状态不是recovering则返回if (state != RecoveryState.RECOVERING) { return } //否则置于正在恢复中completing_recove...原创 2019-01-17 10:55:02 · 165 阅读 · 0 评论 -
spark2.11-2.3源码1_SparkContext初始化
SparkContext初始化HeartbeatReceiver:我们需要在“createTaskScheduler”之前注册“heartbeatReceiver”,因为执行器将在构造函数中检索“heartbeatReceiver”。HeartbeatReceiver所在文件为HeartbeatReceiver.scala,该文件开始部分包含一些HeartbeatReceiver接受/返回的...原创 2019-01-16 13:51:09 · 275 阅读 · 0 评论