spark的worker收到任务时,在执行fetchAndRunExecutor方式中,执行了ExecutorRunner方法,代码如下:
new ExecutorRunner(
appId,
execId,
appDesc.copy(command = Worker.maybeUpdateSSLSettings(appDesc.command, conf)),
cores_,
memory_,
self,
workerId,
host,
webUi.boundPort,
publicAddress,
sparkHome,
executorDir,
workerUri,
conf,
appLocalDirs, ExecutorState.RUNNING)
CoarseGrainedExecutorBackend 就是在appDesc.copy(command = Worker.maybeUpdateSSLSettings(appDesc.command, conf))这行的appDesc中包含,
在sparkcontext初始化的时候,如果是Standalone模式,在初始化 val backend = new StandaloneSchedulerBackend(scheduler, sc, masterUrls)对象,StandaloneSchedulerBackend对象中command包含了创建CoarseGrainedExecutorBackend的命令。
val command = Command("org.apache.spark.executor.CoarseGrainedExecutorBackend",
args, sc.executorEnvs, classPathEntries ++ testingClassPath, libraryPathEntries, javaOpts)