在前面的文章中已经知道,Application既占用了Master的资源,也占用Worker里的Executor资源。当Application运行完后这些资源是都要释放的。
停止Executor
Application首先会从内存中,拿出分配给当前Application的Executors信息,通过Executor的RpcEndpointRef,给每个Executor发送RPC请求,让他们停止Executor,Executor收到请求后,就会停止当前的Executor(字体红色标识)。
释放Driver
Executor停止后,Driver就没用了,所以这里停止DriverEndpoint。
取消注册Application
Application向Master发送请求,要求取消当前的Application。Master收到请求后,就把内存中关于Application的部分进行变更,然后给相应的Worker发送消息,消息包括Executor的ID,要求杀死Executor相关内容。
然后再从持久化中移除Application。
Worker收到杀死Executor的请求,根据Master提供的Executor的ID,找到对应的Executor,把进程杀死。
释放ClientEndpoint
Application注册取消后,ClientEndpoint就没用了,所以这里停止ClientEndpoint。
异常退出
如果是异常退出,Master会监听客户端与当前节点的连接断开,然后会主动的执行上面取消注册Application的操作,并且会通知Application,告知你已经被Master移除了,然后Application收到消息就会停止ClientEndpoint。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。