启动的入口:
org.apache.spark.executor.CoarseGrainedExecutorBackend
初始化
初始化各种配置和rpc的连接,从driver拉取各种配置信息。
driver端的回复
通过rpcEnc设置endpoint的时候,会自动化初始化CoarseGrainedExecutorBackend,调用onStart()方法,具体原理参考(https://blog.csdn.net/u013560925/article/details/80274135)
把当前的executor注册到applicationMaster.
Executor
在接收到ApplicationMaster的回复之后,就实例化一个executor.
这个时候driver和executor就完全建立起连接了,在drvier端通过DAGScheduler发送LaunchTask请求的时候,executor端就可以接收处理了。
Task具体运行的实例是TaskRunner(继承了Runnable接口), Executor启动一个独立的线程池。
TaskRunner就是具体执行Task的包装Runner, 里面包括了一些监控指标上报,一些环境变量的初始化,状态机的转换和上报,结果数据的序列化和上报。
这里说明一下:shuffleMapTask和ResultTask的不同。
shuffleMapTask会把结果数据通过SorShufflerManager写到内存,堆外内存,磁盘中。而ResultTask会直接把序列化的数据直接传给driver。