099-Spark-源码-SparkSubmit源码和任务执行流程

SparkSubmit

-- main

	-- doSubmit
	
		// 解析参数
		-- parseArguments
		
			// master => --master => yarn
			// mainClass => --class => SparkPi(WordCount)
			-- parse
			
		-- submit
		
			-- doRunMain
			
			-- runMain
			
				// (childArgs, childClasspath, sparkConf, childMainClass)
				// 【Cluster】childMainClass => org.apache.spark.deploy.yarn.YarnClusterApplication
				// 【Client 】childMainClass => SparkPi(WordCount)
				-- prepareSubmitEnvironment
				
				// Class.forName("xxxxxxx")
				-- mainClass : Class = Utils.classForName(childMainClass)
				
				// classOf[SparkApplication].isAssignableFrom(mainClass)
				-- 【Cluster】a). mainClass.getConstructor().newInstance().asInstanceOf[SparkApplication]
				-- 【Client 】b). new JavaMainApplication(mainClass)
				
				-- app.start

YarnClusterApplication

-- start

	// new ClientArguments
	// --class => userClass => SparkPI(WordCount)
	-- new Client
	
	-- client.run
	
		-- submitApplication
		
			// 【Cluster】 org.apache.spark.deploy.yarn.ApplicationMaster
			// 【Client 】 org.apache.spark.deploy.yarn.ExecutorLauncher
			--createContainerLaunchContext
			--createApplicationSubmissionContext

启动ApplicationMaster和Driver

-- main

	// --class => userClass => SparkPi(WordCount)
	-- new ApplicationMasterArguments
	
	-- master = new ApplicationMaster
	
	-- master.run()
	
	-- 【Client 】runExecutorLauncher
	-- 【Cluster】runDriver
	
		-- userClassThread = startUserApplication()
		
			-- ClassLoader.loadClass(args.userClass)
				getMethod("main")
				
			-- new Thread().start()
			
				-- run
					-- mainMethod.invoke(null, userArgs.toArray)
					
						-- WordCount
						
							-- new SparkContext() // 创建Spark的环境
							-- 【blocking....................】
		
		// Blocking -----------------------------------------
		-- val sc = ThreadUtils.awaitResult
		
		// 注册
		-- registerAM
		
		// 资源分配
		-- createAllocator
		
			-- allocator.allocateResources
			
				-- handleAllocatedContainers
				
					-- runAllocatedContainers
					
						// bin/java org.apache.spark.executor.YarnCoarseGrainedExecutorBackend
						-- prepareCommand
		
		-- resumeDriver // 执行Spark作业
		-- userClassThread.join()

启动ExecutorBacked,创建计算对象、任务的调度和执行
YarnCoarseGrainedExecutorBackend

-- main

	-- CoarseGrainedExecutorBackend.run
	
		-- val env = SparkEnv.createExecutorEnv
		
		-- env.rpcEnv.setupEndpoint("Executor")

posted @   爱吃麻辣烫呀  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示