首页 > 大数据 > > Spark通信架构-通读理解
折腾七个小时,终于到安徽参加大学好友,应该是我们这群小伙伴里最后一个结婚的好友婚宴。。。
Spark作为分布式计算框架,多个节点的设计与相互通信模式是其重要的组成部分。
其中Akka和Netty的通信架构在Spark架构中扮演重要角色。手稿学习如下



RpcEndPoint: RPC端点,Spark针对每个节点(Client/Master/Worker)都称之为一个Rpc端点,且都实现了RpcEndPoint接口,内部根据不同端点的需求,设计不同的消息和不同的业务处理,如果要发送(询问)则调用Dispatcher。
RpcEnv:RPC的上下文 环境,每个Rpc端点运行时依赖的上下文环境称之为RpcEnv
Dispatcher:消息分发器,针对于RPC端点,需要发送消息或从远程RPC接收到的消息,分发至对应的指令收件箱/发件箱。如果指令接收方是自己,则存入收件箱,如果指令接收方为非自身端点,则放入发件箱。
InBox:指令消息收件箱。一个本地端点对应一个收件箱,Dispatcher在每次向Inbox存入消息时,都将对应EndPointData加入内部的ReceiverQueue中,另外,Dispatcher创建时 会启动一个单独线程进行轮询ReceiverQueue,进行收件箱消息消费。
OutBox:指令消息发件箱,一个远程端点对应一个发件箱(也就是说一个本地端点可以有多个发件箱),当消息放入Outbox后,紧接着将消息通过TransportClient发送出去。消息放入发件箱以及发送过程是在同一个线程中进行,这样做的主要原因是远程消息分为RpcOutboxMessage,OneWayOutboxMessage两种消息,而针对于需要应答的消息直接发送且需要得到结果进行处理。
TranSportClient:Netty通信客户端,一个OutBox对应一个TranSportClient,根据OutBox消息的receiver信息,请求对应远程TranSportServer。
TranSportServer:Netty通信服务端,一个Rpc端点对应一个TranSportServer,接远程消息后调用Dispatcher分发消息至对应的收发件箱。
EndPoint启动后,默认会向Inbox中添加 Onstart消息,不同的端点(Master/Worker/Client)消费Onstart指令时,进行相关端点的启动处理流程(会在具体的实现类中实现)。
EndPoint启动时,会默认启动TranSportServer,且启动结束后悔进行一次同步测试rpc可用性(askSync-BoundPortsRequest)。
Dispatcher作为一个分发器,内部存放了InBox句柄和状态数据(outBoxes在NettyRpcEnv中)。结构大致如下:







声明:该博客整理自尚硅谷2018出的一套教学视频,Spark章节由武玉飞老师主讲。学习总结笔记。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31509949/viewspace-3118493/ ,如需转载,请注明出处,否则将追究法律责任。