Spark源码(五)——RPC组件
发布日期:2021-11-18 17:47:13 浏览次数:14 分类:技术文章

本文共 1046 字,大约阅读时间需要 3 分钟。

文章目录

前言

RPC是一种远程过程的调用,即是两台机器或节点之间的数据传输;

在这里插入图片描述

  • 各个组件都有自己的执行环境,java必须在jvm, spark在spark-env,rpc在rpc-env,rpc-env是在spark2.x.x新增的,替换了spark1.x.x的akka通信框架;
    在这里插入图片描述
    其中RPC-env离不开我们的sparkENV,在我们的SparkEnv启动时即是会启动RPC-ENV;
    sparkENV是在sparkcontext启动的时候启动;
    在这里插入图片描述

一、Spark内置的RPC

sparkcontext是万物之初,在sparkContext中会有一个createsparkEnv(),一层一层往下创建;

在这里插入图片描述
在了解NettyRPCENV之前,需要先了解几个基本概念,这些很重要:

  1. RPC端点:RPCEndPoint,简单就是能够处理RPC请求的一个组件的抽象;也就是相当于akka的actor;以下剖析RPCEndPoint,主要包括recieve方法和recieveandreply方法
    在这里插入图片描述在这里插入图片描述
    其中ThreadSafeRpcEndpint主要是处理rpc消息的,有若干个类实现这个ThreadSafeRPcEndpoint;

在这里插入图片描述

2.akka框架中通信有两个组件,akka和akkaREF,所以rpcEndpointREF替换了akkaREF。

在这里插入图片描述
客户端想向服务端发送消息,必须要有服务端的RPCEndpoint的引用;
RPCEnddpointREF包括如下方法:
在这里插入图片描述
在这里插入图片描述
3.消息相关的类:InboxMessage
在这里插入图片描述
一共有七种类型的消息:
OneWayMessage:不需要回复的消息;rpcEndpoint可以处理此消息不响应
RPCMessage:这个消息发送给rpcendpoint就必须处理并响应;
其他三个类对应:RPCEndpoint的onconnected,ondisconnected,onNetworkError方法处理;

  • 重头戏:Dispatcher,消息调度器,有效提高nettyRpcENV对消息的处理并最大提升并行处理,主要负责将RPC消息发送到要对该消息处理RPCEndpoint;

在这里插入图片描述

在NettyRpcEnv创建Dispacher对象
在这里插入图片描述
剖析Dispatcher:
在这里插入图片描述
其中Inbox以链表的数据结构存放InboxMessage;
在这里插入图片描述
Dispatcher的属性介绍:
在这里插入图片描述
Dispatcher的内存模型图:
在这里插入图片描述
其中线程池是尤为重要,每个线程去查看reciver查看是否有消息进来,并进行消息处理;
在这里插入图片描述

转载地址:https://blog.csdn.net/weixin_37850264/article/details/111992615 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Spark源码(七)——master注册机制
下一篇:Spark源码(六)——master主备切换

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年03月31日 12时48分41秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章