二、Spark内核之通讯架构

Spark内核系列目录

一、Spark内核的运行机制

二、Spark内核的通讯架构


一、通讯架构概述

Spark 2.x通信架构均使用Netty通讯框架作为内部通讯组件,采用了Actor模型的设计。

Actor System
Spark通讯的组件(Client/Master/Worker)可以认为是一个个独立的实体,各个实体之间通过消息进行通信。
Spark Message System
Endpoint(Client/Master/Worker)有1个Inbox和N个OutBox(N >= 1, N取决于当前Endpoint与多少其他的Endpoint进行通信),其中InBox负责接收消息,而OutBox负责发送消息。

Driver:

class DriverEndpoint extends IsolatedRpcEndpoint

Executor:

class CoarseGrainedExecutorBackend extends IsolatedRpcEndpoint

二、通讯架构详解

1. 架构图

Spark的通信架构如图所示:

NettyRpcEnv

2. 节点介绍

(1)RpcEndpoint:RPC通信终端。Spark针对每个节点(Client/Master/Worker)都称之为一个RPC终端,且都实现RpcEndpoint接口,内部根据不同端点的需求设计不同消息和业务处理,如需要发送则调用Dispatcher。在Spark中,所有的终端都存在生命周期:
  • Constructor
  • onStart
  • receive
  • onStop
(2)RpcEnv:RPC上下文环境,每个RPC终端运行时依赖的上下文环境成为RpcEnv,当前版本是NettyRpcEnv

(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的通讯机制,应熟知通讯架构图及标红部分节点的功能。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值