在前面的文章中已经知道,Application既占用了Master的资源,也占用Worker里的Executor资源。当Application运行完后这些资源是都要释放的。
image.png

停止Executor

Application首先会从内存中,拿出分配给当前Application的Executors信息,通过Executor的RpcEndpointRef,给每个Executor发送RPC请求,让他们停止Executor,Executor收到请求后,就会停止当前的Executor(字体红色标识)。
image.png

释放Driver

Executor停止后,Driver就没用了,所以这里停止DriverEndpoint。
image.png

取消注册Application

Application向Master发送请求,要求取消当前的Application。Master收到请求后,就把内存中关于Application的部分进行变更,然后给相应的Worker发送消息,消息包括Executor的ID,要求杀死Executor相关内容。
image.png
然后再从持久化中移除Application。
image.png
Worker收到杀死Executor的请求,根据Master提供的Executor的ID,找到对应的Executor,把进程杀死。
image.png

释放ClientEndpoint

Application注册取消后,ClientEndpoint就没用了,所以这里停止ClientEndpoint。
image.png

异常退出

如果是异常退出,Master会监听客户端与当前节点的连接断开,然后会主动的执行上面取消注册Application的操作,并且会通知Application,告知你已经被Master移除了,然后Application收到消息就会停止ClientEndpoint。


大军
847 声望183 粉丝

学而不思则罔,思而不学则殆