zoukankan      html  css  js  c++  java
  • Spark 通讯架构

    3.Spark 通讯架构

    3.1 Spark 通信架构概述

      Spark2.x 版本使用 Netty 通讯框架作为内部通讯组件。spark 基于 netty 新的 rpc
    框架借鉴了 Akka 的中的设计,它是基于 Actor 模型,如下图所示:
     
      Spark 通讯框架中各个组件(Client/Master/Worker)可以认为是一个个独立的实
    体,各个实体之间通过消息来进行通信。具体各个组件之间的关系图如下: 
     
      Endpoint(Client/Master/Worker)有 1 个 InBoxN 个 OutBox(N>=1,N 取决
    于当前 Endpoint 与多少其他的 Endpoint 进行通信,一个与其通讯的其他 Endpoint
    对应一个 OutBox),Endpoint 接收到的消息被写入 InBox,发送出去的消息写入
    OutBox 并被发送到其他 Endpoint 的 InBox 中。
     
     
     
     

    3.2 Spark 通讯架构解析

    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 通信架构的高层视图如下图所示:
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    mybaits 时间查询DATE_FORMAT
    spring AOP
    Sqlserver 分页
    @PathVariable注解使用
    easyui 无限级数tree[menulist1 = GetMenuList(sm2,menulist1);]
    查询重复数据group by menu_id having count(menu_id)>1
    SQL把a表字段数据存到b表字段 update,,insert
    毕向东讲解(摘)—12.线程通信,解决安全问题
    URL的加密解密方法
    web项目中的浏览器行为和服务器行为
  • 原文地址:https://www.cnblogs.com/LXL616/p/11164332.html
Copyright © 2011-2022 走看看