Spark源码解析3 - 提交Task到Executor

==提交Task到Executor=
App->Job->Stage->Task

注:这里Driver、Executor已经都准备好了。

1.Driver端任务提交
org.apache.spark.scheduler.DAGScheduler

--submitMissingTasks
	//每一个Task对应处理一个分区的数据,将多个Task放到TaskSet中进行提交
	--taskScheduler.submitTasks(new TaskSet)

		//在Task之前,创建了TaskSetManager对TaskSet进行封装
		--val manager = createTaskSetManager(taskSet, maxTaskFailures)

		//将封装好的TaskSetManager放到资源调度器中
		//先进先出: org.apache.spark.scheduler.FIFOSchedulableBuilder(默认)	
		//公平:	org.apache.spark.scheduler.FairSchedulableBuilder
		--schedulableBuilder.addTaskSetManager(manager, manager.taskSet.properties)

		//触发底层资源调度	 底层调用的是CoarseGrainedSchedulerBackend.reviveOffers
		--backend.reviveOffers() 
			//给Driver终端发送一条标记位ReviveOffers的消息,
			--driverEndpoint.send(ReviveOffers)

			--Driver终端会通过receive的方法,接收消息并对其进行处理
				 #case ReviveOffers =>makeOffers()	

				 	//获取可用的Executor
				 	--val activeExecutors = executorDataMap.filterKeys(executorIsAlive)
				 	--val workOffers = activeExecutors.map	

				 	//	scheduler.resourceOffers(workOffers) 决定Task应该交给哪个Executor处理
				 	--运行Task launchTasks(scheduler.resourceOffers(workOffers))

				 		//因为要将Task提交到Executor运行,所以需要进行序列化
				 		--val serializedTask = ser.serialize(task)
				 		//给Executor终端发送Task
				 		--executorData.executorEndpoint.send(LaunchTask(new SerializableBuffer(serializedTask)))

2.Executor端接收Task并运行

--receive
	//对接收到的消息类型进行匹配,匹配LaunchTask
	*case LaunchTask(data)

		//对接收到的Task进行反序列化
		--val taskDesc = ser.deserialize[TaskDescription](data.value)

		//运行Task
		--executor.launchTask
			//从线程池中获取线程,执行task
			--threadPool.execute(tr)
				--TaskRunner.run
					--task.run
						--runTask(context)
							--ShuffleMapTask   // 往磁盘写
							--ResultTask   // 从磁盘读
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值