这篇文章主要是对Master主备切换过程的源码进行分析,分析了主备切换的详细实现流程
由于文章本来是写在我的笔记本里的,不方便粘代码,代码就直接贴图了
首先分析completeRecovery()方法:
下面分析上面的schedule方法:
下面分析上面的launchDriver方法:
上面的worker.endpoint.send方法通过Akka或者Netty的Rpc通信实现actor通信
这里是我的一个失误,我的程序里有 Spark 1.x的Jar包 也有 Spark 2.x的Jar包
这里的Akka和Netty分别属于1.x和2.x的Jar包,也就是说并不是通过Akka或Netty实现通信
而是不同版本用不同的我方式
如下就是Akka的send方法:
如下就是startExecutorOnWorkers方法:
下面就是通过conf获取的spreadOutApps(判断准则):
下面解析了scheduleExecutorsOnWorkers方法
spark2.x的这部分代码除了通信框架由Akka换成了Netty,其他的几乎没有变化