Spark Master中的通信过程——launchDriver方法为例(上)

以Spark 2.x为标准(通信框架使用Netty)

org.apache.spark.deploy.master 包下的 launchDriver方法
在这里插入图片描述
workerInfo中的endpoint就是RpcEndpointRef对象
在这里插入图片描述
RpcEndpointRef是一个抽象类
在这里插入图片描述
在Spark1.x的时代Spark底层使用Akka进行通信的, 到了2.x就换成了更加好用的Netty框架
在这里插入图片描述
下面我们来看一下NettyRpcEndpointRef中send方法的实现
在这里插入图片描述
首先调用了require方法传入两个参数 第一个为Boolean值表示传入message是否为null, 第二个是String 类型的抛异常会出现的相关提示
在这里插入图片描述
从这里我们可以看出如果传入消息为null则会抛出异常

否则进行下一步,调用nettyEnv的send方法真正的实现消息的传输
在这里插入图片描述
我们看到这个message也是一个经过封装的数据格式
在这里插入图片描述
首先我们先说明一下message to local RPC endpoint的情况:
dispatcher的postOneWayMessage方法
在这里插入图片描述
在这里插入图片描述
下面讲一下上面的三个点
1.
endpoints是一个dispatcher中的ConcurrentHashMap 是<String, EndpointData>的结构
String储存消息输送终端的name
在这里插入图片描述
EndpointData存储了endpoint的详细信息
包括了 name, 整个RpcEndPoint, 整个NettyRpcEndpointRef,

在这里插入图片描述
一个Inbox对象
在这里插入图片描述
2.
Data是上面从HashMap中取出的EndpointData, 这里调用他的inbox对象的post方法
在这里插入图片描述
3.
这里的receivers是一个Queue[EndpointData],通过offer方法将data存入在这里插入图片描述
到此为止只是把要发送的数据全部post到想要存放的数据结构中,程序是从哪里以什么样的方式使用Netty框架对消息进行输送还不得而知.今天研究了local RPC, inBox, 明天继续对remote RPC, outBox进行研究

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值