spark 源码分析之九--Spark RPC剖析之StreamManager和RpcHandler
StreamManager
StreamManager类说明
StreamManager 官方说明如下:
StreamManager两个子类实现
可以看到它有两个实现,一个实现是OneForOneStreamManager,也就是说的getChunk 方法被串行调用,一旦关闭不再使用。其关键方法 getChunk 如下:
其中,sream 维护了 streamId 和 StreamState 的映射关系。
StreamState 的类结构如下:
appId 是TransportClient 的 id 号;
associatedChannel 表示 与之关联的 channel 对象;
buffer 是 一个 迭代的 ManagedBuffer 对象,其中ManagedBuffer是一个不可变的byte数组的抽象;
chunksBeingTransferred保存了正在传输的chunk number;
curChunk 保存了已经完成的chunk 的 下标索引。
另一个实现是NettyStreamManager是用于支持管理器注册资源的,主要被SparkContext 使用,它不支持getChunk 这个关键的方法。
个人观点,这个类不应该继承StreamManager 了,因为它的关键功能 getChunk 都不能用了。
RpcHandler
NettyRpcHandler继承了RpcHandler,并实现了 logging trait。
超类RpcHandler
其官方解释如下:
Handler for sendRPC() messages sent by TransportClients.
即它是处理 TransportClient 发送的 rpc 消息的handler。也就是说,这是在server 端使用的
其类结构如下:
ONE_WAY_CALLBACK 方法是一个默认的OneWayCallback 实现,主要是用于打印日志track。
NettyRpcHandler
子类NettyRpcHandler 的官方说明如下:
Dispatches incoming RPCs to registered endpoints. The handler keeps track of all client instances that communicate with it, so that the RpcEnv knows which TransportClient instance to use when sending RPCs to a client endpoint (i.e., one that is not listening for incoming connections, but rather needs to be contacted via the client socket). Events are sent on a per-connection basis, so if a client opens multiple connections to the RpcEnv, multiple connection / disconnection events will be created for that client (albeit with different RpcAddress information).
即,它是负责将传入的RPC调度到已注册的端点上的handler。它跟踪与之通信的所有客户端实例,以便RpcEnv知道在将RPC发送到客户端端点时使用哪个TransportClient实例(即,一个不监听传入连接,但需要通过客户端套接字)。事件是基于每个连接发送的,因此如果客户端打开与RpcEnv的多个连接,将为该客户端创建多个连接/断开连接事件(尽管具有不同的RpcAddress信息)。
其关键方法如下:
首先它会根据传进来的TransportClient的channel获取到 remoteAddress 的信息,然后和ByteBuffer 类型的message 进一步封装成RequestMessage然后将接收进来的事件post给Dispatcher对象,Dispatcher再做进一步分发。
spark 源码分析之九--Spark RPC剖析之StreamManager和RpcHandler的更多相关文章
- spark 源码分析之十一--Spark RPC剖析之TransportClient、TransportServer剖析
TransportClient类说明 先来看,官方文档给出的说明: Client for fetching consecutive chunks of a pre-negotiated stream. ...
- spark 源码分析之十--Spark RPC剖析之TransportResponseHandler、TransportRequestHandler和TransportChannelHandler剖析
spark 源码分析之十--Spark RPC剖析之TransportResponseHandler.TransportRequestHandler和TransportChannelHandler剖析 ...
- Spark源码分析之九:内存管理模型
Spark是现在很流行的一个基于内存的分布式计算框架,既然是基于内存,那么自然而然的,内存的管理就是Spark存储管理的重中之重了.那么,Spark究竟采用什么样的内存管理模型呢?本文就为大家揭开Sp ...
- spark 源码分析之十七 -- Spark磁盘存储剖析
上篇文章 spark 源码分析之十六 -- Spark内存存储剖析 主要剖析了Spark 的内存存储.本篇文章主要剖析磁盘存储. 总述 磁盘存储相对比较简单,相关的类关系图如下: 我们先从依赖类 Di ...
- spark 源码分析之十二 -- Spark内置RPC机制剖析之八Spark RPC总结
在spark 源码分析之五 -- Spark内置RPC机制剖析之一创建NettyRpcEnv中,剖析了NettyRpcEnv的创建过程. Dispatcher.NettyStreamManager.T ...
- Spark 源码分析系列
如下,是 spark 源码分析系列的一些文章汇总,持续更新中...... Spark RPC spark 源码分析之五--Spark RPC剖析之创建NettyRpcEnv spark 源码分析之六- ...
- Spark源码分析之八:Task运行(二)
在<Spark源码分析之七:Task运行(一)>一文中,我们详细叙述了Task运行的整体流程,最终Task被传输到Executor上,启动一个对应的TaskRunner线程,并且在线程池中 ...
- spark 源码分析之十八 -- Spark存储体系剖析
本篇文章主要剖析BlockManager相关的类以及总结Spark底层存储体系. 总述 先看 BlockManager相关类之间的关系如下: 我们从NettyRpcEnv 开始,做一下简单说明. Ne ...
- Spark源码分析 – 汇总索引
http://jerryshao.me/categories.html#architecture-ref http://blog.csdn.net/pelick/article/details/172 ...
随机推荐
- 容器化之Docker小知识普及
Docker确实是个好东西,相当于一个小型虚拟机,里面环境隔离只要有对应的镜像就能运行业务应用.运行基础应用.能跑数据库等等,还能跑linux等等. Docker 从狭义上来讲就是一个进程,从广义上来 ...
- .Net上传文件处理三大范式,及开发注意事项
最近工作内容涉及到一点前端的内容,把学习到的内容记录下来,在今后的开发过程中,不要犯错.本篇只针对一些刚入职的小白及前端开发人员,大牛请绕道!~ 刚开始我们先不讲上传文件的防范问题,先通过一个例子,让 ...
- Jmeter 如何把数据库的数据依次获取作为参数传入下一个请求?附栗子
某一天碰到一个问题,觉得很有必要整理一篇文章出来~ 因为项目的原因,假设我们要实现如下要求: 从数据库的用户表里获取用户信息,并作为参数全部传递给登录请求,分别完成登录操作. 一.jmeter连接数据 ...
- memcached--add使用
memcached是一种管理内存的软件,来动态的分配机器的内存,将需要存储的数据以key-value(键值对)的形式存储在内存中. 1.memcached使用的存储算法是hash算法在内存中存储字符串 ...
- Windows 10使用Tesseract-OCR出现WindowsError: [Error 2]
Tesseract-OCR安装时默认安装在x86的目录下,手动添加环境变量此电脑-->属性-->高级系统设置-->环境变量,点击系统变量里的Path, 点击编辑,在编辑环境变量界面中 ...
- Xmanager 5远程连接CentOS7图形化界面
1.安装Xmanager 5下载链接:https://pan.baidu.com/s/1JwBk3UB4ErIDheivKv4-NA提取码:cw04 双击xmgr5_wm.exe进行安装 点击‘下一步 ...
- K8s集群部署(三)------ Node节点部署
之前的docker和etcd已经部署好了,现在node节点要部署二个服务:kubelet.kube-proxy. 部署kubelet(Master 节点操作) 1.二进制包准备 [root@k8s-m ...
- canvas多彩粒子星空背景
HTML5 canvas 实现多颜色粒子星空页面背景,喜欢的可以收藏.自己可以定义颜色,粒子透明度,粒子数量,粒子大小. 预览效果图如下: 1.获取canvas上下文,并且动态设置canvas尺寸和屏 ...
- DataBinding的用法
一.基本介绍 DataBinding数据绑定库是一种支持库,借助该库,可以使用声明性格式(而非程序化地)将布局中的界面组件绑定到应用中的数据源.这是官方给出的介绍. 那么为什么要使用DataBindi ...
- 关于pcl索引的使用
最近开始动手做实验,之前写了一个小实验利用到了PCL库中的索引: 现在在写利用PCL中的RegionGrowing类来分割生成面片,无论是迭代生成还是进行提取都需要用到pcl库中定义的索引, 虽然搞的 ...