Spark通信-Dispatcher

举报
CreamCrystal 发表于 2020/09/23 10:26:13 2020/09/23
【摘要】 Spark作为优秀的大数据处理的处理框架,需要通过集群机器的协作来高效的处理数据,为了实现集群的功能,机器之间稳定及高性能的通信就成为了必要条件.为此,spark在2.x的版本就使用netty彻底替换掉了akka,作为spark的通信框架,并设计了如下通讯架构: 1.RpcEndpoint:RPC端点,Spark针对每个节点(Client/Master/Worker)都...

 

       Spark作为优秀的大数据处理的处理框架,需要通过集群机器的协作来高效的处理数据,为了实现集群的功能,机器之间稳定及高性能的通信就成为了必要条件.为此,spark在2.x的版本就使用netty彻底替换掉了akka,作为spark的通信框架,并设计了如下通讯架构:


   1.RpcEndpointRPC端点,Spark针对每个节点(Client/Master/Worker)都称之为一个Rpc端点,且都实现RpcEndpoint接口,内部根据不同端点的需求,设计不同的消息和不同的业务处理,如果需要发送(询问)则调用Dispatcher
    2.RpcEnvRPC上下文环境,每个RPC端点运行时依赖的上下文环境称为RpcEnv
    3.Dispatcher:消息分发器,针对于RPC端点需要发送消息或者从远程RPC接收到的消息,分发至对应的指令收件箱/发件箱。如果指令接收方是自己则存入收件箱,如果指令接收方不是自己,则放入发件箱;
    4.Inbox:指令消息收件箱,一个本地RpcEndpoint对应一个收件箱,Dispatcher在每次向Inbox存入消息时,都将对应EndpointData加入内部ReceiverQueue中,另外Dispatcher创建时会启动一个单独线程进行轮询ReceiverQueue,进行收件箱消息消费;
    5.RpcEndpointRefRpcEndpointRef是对远程RpcEndpoint的一个引用。当我们需要向一个具体的RpcEndpoint发送消息时,一般我们需要获取到该RpcEndpoint的引用,然后通过该应用发送消息。
    6.OutBox:指令消息发件箱,对于当前RpcEndpoint来说,一个目标RpcEndpoint对应一个发件箱,如果向多个目标RpcEndpoint发送信息,则有多个OutBox。当消息放入Outbox后,紧接着通过TransportClient将消息发送出去。消息放入发件箱以及发送过程是在同一个线程中进行;
    7.RpcAddress:表示远程的RpcEndpointRef的地址,Host+Port
    8.TransportClientNetty通信客户端,一个OutBox对应一个TransportClientTransportClient不断轮询OutBox,根据OutBox消息的receiver信息,请求对应的远程TransportServer
    9.TransportServerNetty通信服务端,一个RpcEndpoint对应一个TransportServer,接受远程消息后调用Dispatcher分发消息至对应收发件箱


    本文主要讲讲Spark的消息分发器Dispatcher

 





    Dispatcher初始化:

1.     endpoints: ConcurrentMap[String, MessageLoop],负责存储 endpoint name MessageLoop的映射关系

2.     endpointRefs: ConcurrentMap[RpcEndpoint, RpcEndpointRef] 包含了 RpcEndpoint RpcEndpointRef 的映射关系

3.     stopped : 标志 Dispatcher 是否已经停止

4.     sharedLoop:负责处理接受到的信息

1.png

    Dispatcher注册rpc:

      在RPC 服务端启动时调用registerRpcEndpoint,将endpoint注册到endpoints

    Dispatcher消息处理:

       Dispacther的所有消息,最终都会由postMessage方法去处理,其中主要是通过loop.post()方法去调用SharedMessageLoopPost方法,再由其中的inbox处理数据,此处不展开讲inbox.

       总结:Dispatcher的作用主要是维护endpoint信息,并实现服务端的消息分发工作,而具体的消息处理,则有inbox进行处理。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。