Spark通信-Dispatcher

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

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


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

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

    全部回复

    上滑加载中

    设置昵称

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

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

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