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