Spark RPC之Netty启动
来源:互联网 发布:淘宝开零食店赚钱吗 编辑:程序博客网 时间:2024/05/23 01:41
概要
Spark RPC概述中我们介绍了Spark RPC接口的设计和使用,spark1.6版本中RPC底层实现使用netty,并在后续2.x版本中彻底移除了akka,因此,我们看下Spark RPC内部如何使用netty的。
RpcEnv(NettyRpcEnv)的创建
查看SparkContext中创建RpcEnv的代码
查看对应的RpcEnv.create方法
- 根据反射获得RpcEnvFactory实例,默认为NettyRpcEnvFactory,2.x版本中移除了Akka实现。
- 调用NettyRpcEnvFactory的create方法创建RpcEnv,查看对应方法
- 实例化java序列化工具。
- 实例化NettyRpcEnv。
- server端启动netty server,提供底层RPC服务。
- 定义启动netty的方法startNettyRpcEnv,输入为端口号。
- 使用Utils.startServiceOnPort启动server,查看该方法
如上图注释处,startServiceOnPort方法调用startService启动server,而startService就是startNettyRpcEnv方法。
netty server的启动
上一节最后讲到调用startNettyRpcEnv方法启动netty server,而startNettyRpcEnv调用的是NettyRpcEnv.startServer,查看对应方法
调用transportContext的createServer方法启动 netty server,TransportContext用来创建server和clientFactory,下面会讲,查看createServer方法
根据上面截图,createServer执行了如下步骤
1. new TransportServer实例。
2. TransportServer构造器中调用init方法。
3. init方法中启动netty server(不熟悉netty点这里Netty User guide for 4.x)。
到这里,我们跟踪了spark 如何启动netty server,以Master启动netty为例,流程如下
netty的封装
spark对netty做了封装,在spark-network-common模块,如下
1. TransportContext维护Transport的上下文环境,用于创建TransportServer和TransportClientFactory。
2. TransportServer通过构造函数启动netty,提供底层通信服务。
3. TransportClientFactory用来创建TransportClient。
4. TransportClient用以和对应的TransportServer通信。
此外还有用于处理信息的MessageEncoder、MessageDecoder、RpcHandler等,这些和netty的具体使用紧密相关,后续介绍,也可参考Netty User guide for 4.x,关于spark-network-common更多信息参考Spark Network Common的实现。
总结
介绍了以下两部分内容:
1. spark中启动netty的过程,即创建RpcEnv时,通过TransportContext实例化TransportServer,TransportServer构造器中启动netty。
2. spark对netty的封装,主要包括TransportContext、TransportContext、TransportClientFactory和TransportClient。
- Spark RPC之Netty启动
- Spark RPC之RpcEnvFileServer
- Spark RPC之RpcEndpointVerifier
- rpc netty
- Netty-RPC
- 简单RPC实现之Netty实现
- Spark RPC之Master实现
- Spark RPC之Worker实现
- Spark RPC之RpcResponse处理
- spark源码解析 spark-core之rpc
- Spark RPC之Dispatcher、Inbox、Outbox
- Spark RPC之RpcRequest请求处理流程
- Spark RPC
- 【总结】Netty(RPC高性能之道)原理剖析
- 基于Netty的RPC架构笔记5之心跳
- 【总结】Netty(RPC高性能之道)原理剖析
- 【总结】Netty(RPC高性能之道)原理剖析
- 【总结】Netty(RPC高性能之道)原理剖析
- 今天的任务 复习数据库 然后写一下面向对象的代码(图书馆租书系统)
- RecyclerView的使用、res下新建菜单menu-main.xml
- Slim使用详解
- 团体程序设计天梯赛L2-008 最长对称子串
- 第二章 线性表
- Spark RPC之Netty启动
- Pigeon发布流程
- JavaScript读取XML文件
- 【面试题】剑指offer 7
- shell脚本之-if流程控制语句和for循环语句的使用
- 鸟哥的linux私房菜学习笔记《一》操作系统基础
- DOM方式进行XML文件解析
- log4j使用小结
- Unity3D开发之Hashtable转Json