在spark 源码分析之五 -- Spark内置RPC机制剖析之一建立NettyRpcEnv中,剖析了NettyRpcEnv的建立过程。html
Dispatcher、NettyStreamManager、TransportContext、TransportClientFactory、TransportServer、Outbox、Inbox等等基础的知识都已经在前面剖析过了。网络
能够参照以下文章作进一步了解。架构
spark 源码分析之五 -- Spark内置RPC机制剖析之一建立NettyRpcEnv框架
spark 源码分析之六 -- Spark内置RPC机制剖析之二Dispatcher和Inbox、Outbox剖析源码分析
spark 源码分析之七 -- Spark内置RPC机制剖析之三RpcEndPoint和RpcEndPointRef剖析spa
spark 源码分析之八 -- Spark内置RPC机制剖析之四TransportContext和TransportClientFactory剖析netty
spark 源码分析之九 -- Spark内置RPC机制剖析之五StreamManager和RpcHandlercode
spark 源码分析之十一 -- Spark内置RPC机制剖析之七TransportClient和TransportServer剖析blog
spark rpc 总体架构图以下(本身画的😄,很久不画了,生疏了):
做以下说明:
1. spark 网络层是直接依赖于netty 框架的,它的适配器直接绑定到netty 的channel 上。
2. 图中的channel 的encoder 和 decoder 等等netty 相关的组件没有体现出来。
3. channel 是全双工的,因此NettyRpcEnv既有TransportClient 也有TransportServer。
4. 请求包括数据层面的chunk请求和控制层面的rpc请求。chunk请求会被StreamManager处理,rpc 请求会进一步经过Dispatcher分发给合适的endpoint。返回结果经过channel 返回给发送端。
5. RpcEndpointRef能够是本地的RpcEndpoint的简单包装也能够是远程RpcEndpoint 的表明。当RpcEndpoint 发送给 RpcEndpointRef 时,若是这个 RpcEndpointRef 是本地 RpcEndpointRef,则事件消息会被Dispatcher作进一步分发。若是是远程消息,则事件会被进一步封装成OutboxMessage,进而经过本地TransportClient将这个消息经过channel 发送给远程的 RpcEndpoint。
至此,spark rpc所有分析完毕。
原文出处:https://www.cnblogs.com/johnny666888/p/11160486.html