总结
Master启动后会定时清理超时的Worker,Worker启动需要传入Master的地址信息,启动后会向Master注册其相关信息,内存、cpu核数等,然后定时向Master发送心跳,保证自己不被清理。
![](https://img.haomeiwen.com/i2989357/f24ca3b4263afc1f.png)
1.Master源码分析
1.查看${SPARK_HOME}/sbin/start-master.sh
启动脚本
启动的是org.apache.spark.deploy.master.Master
这个类,通过idea查看该类源码,从main
方法开始看
2.Master源码查看
![](https://img.haomeiwen.com/i2989357/7aed692a67bf0bc0.png)
new Master
,查看Master
类,这里主要是保存Worker、Application、Driver
等信息![](https://img.haomeiwen.com/i2989357/a13d59f6d8db945f.png)
onStart
方法中主要是创建一个定时给自己发送信息的守护单线程定时器,然后定时发送信息,发送定时清理超时发送心跳的Woker
,其实就是master保存了一个worker的时间戳
![](https://img.haomeiwen.com/i2989357/d22b39fd2951376b.png)
![](https://img.haomeiwen.com/i2989357/e81c063529150bf5.png)
receive
方法中查看master接收处理CheckForWorkerTimeOut
![](https://img.haomeiwen.com/i2989357/aa6f18ffec4cfbd7.png)
![](https://img.haomeiwen.com/i2989357/7c738c73ab465ada.png)
2.Worker源码分析
1.查看${SPARK_HOME}/sbin/start-worker.sh
启动脚本
启动的是org.apache.spark.deploy.worker.Worker
这个类,通过idea查看该类源码,从main
方法开始看
2.Worker源码查看
跟查看Master源码一样,从main方法开始看
![](https://img.haomeiwen.com/i2989357/2a4cafa12ead1588.png)
查看Worker类代码,跟master一样,创建一个守护单线程线程,定时给自己发送信息,执行相关操作,如向master发送心跳等。
与master不同的是,启动worker需要传入master的ip:port,这里是为了rpc通信,比如worker启动的时候,需要跟master通信,注册信息等。
下面那个看不懂,先截图留着,mark下。
![](https://img.haomeiwen.com/i2989357/e57d5b498d995eeb.png)
Worker是管理Executors的,所以这里会有一些Worker保存的信息,如Executers、App信息等
![](https://img.haomeiwen.com/i2989357/7234a368b25b9b4b.png)
onStart方法中,Worker启动,向registerWithMaster() master发送心跳
![](https://img.haomeiwen.com/i2989357/2837949486f715ea.png)
![](https://img.haomeiwen.com/i2989357/1eddd1aec8f4b219.png)
![](https://img.haomeiwen.com/i2989357/0a59e8a4077e3bd2.png)
开始跟master RPC'通信
![](https://img.haomeiwen.com/i2989357/33ff451050aa3bd6.png)
Worker 向Master发送RegisterWorker,主要是
RegisterWorker(id, workerHost, workerPort, workerRef, cores, memory, workerWebUiUrl, masterAddress),内存,cpu cores等信息。需要去Master源码中查看,Master接收到
Worker信息后,保存Worker信息,发送RegisteredWorker,告诉Worker保存成功
![](https://img.haomeiwen.com/i2989357/ee82a0aab2773bc9.png)
回到Worker中,查看RegisteredWorker,Worker注册成功后,定时发送心跳,报活
![](https://img.haomeiwen.com/i2989357/75ebe287e54fdfd1.png)
然后会发送自己所持有的executors、dirvers信息给master,master接受executors、drivers信息,判断是否有无用的executors,如果有无用的话,发送 KillExecutor、KillDriver 让worker kill 掉worker上的无用executors、drivers。
网友评论