Spark RPC之RpcEnvFileServer
来源:互联网 发布:淘宝网 女士腕表 编辑:程序博客网 时间:2024/06/05 00:14
概要
spark运行时executor可能需要远程下载driver上的jar或文件到本地,对应的内部实现为RpcEnvFileServer,RpcEnvFileServer的子类有NettyStreamManager、HttpBasedFileServer,底层分别由netty、jetty实现,根据参数spark.rpc.useNettyFileServer配置,如下。
RpcEnvFileServer
如上,RpcEnvFileServer定义两个抽象方法,addFile和addJar,用于将jar和file添加到文件服务器,提供下载服务,其实现类有HttpBasedFileServer、NettyStreamManager。
1.HttpBasedFileServer
HttpBasedFileServer底层由jetty实现。
如上图,HttpBasedFileServer继承RpcEnvFileServer,同时拥有属性HttpFileServer,HttpFileServer拥有属性HttpServer,HttpServer中start方法调用doStart方法,doStart方法中启动jetty server,提供文件下载服务,doStart方法中启动jetty server代码如下(对源码稍作整理)
下面查看启动基于jetty server的文件服务器的流程
分为以下两部分
- driver程序启动,初始化SparkContext时启动jetty server,流程如上图①至⑨,其中jetty server文件服务器的根目录为HttpFileServer的baseDir目录(默认为/tmp/UUID),下面有两个二级目录jars、files分别存放jar和file。
- 调用SparkContext的addJar方法依次将driver程序和spark-submit中指定的jar包copy到jetty文件服务器的baseDir/jars目录下,如上图②⑩⑪⑫流程。
至此,executor执行task时,就可以根据driverURL和收到的jar包名连接jetty,远程下载jar包了,具体参考下一篇博客。
2.NettyStreamManager
NettyStreamManager借助于RpcEnv中启动的netty提供服务,请参考Spark RPC之Netty启动。
如上图,NettyStreamManager和HttpBasedFileServer不同,其没有将文件写入本地,而是使用两个属性jars和files集合保存,对应的addJar方法就是将File对象添加到集合jars中,下载文件依靠openStream方法,结果封装为ManagedBuffer返回(ManagedBuffer的概念在Spark RPC之RpcRequest请求处理流程有介绍),openStream方法继承自StreamManager,StreamManager提供底层文件的下载服务,如shuffle过程中间结果的下载,后续详细介绍,UML如下
NettyStreamManager处理请求和RPC相似,如下
流程简单,不详细介绍,完整流程参考Spark RPC之RpcResponse处理 (除请求类型不同外,流程一致),再贴出上述流程中的两处源码
TransportRequestHandler的handle方法,根据请求消息类型,分别处理。
handle方法中处理Stream请求的processStreamRequest方法,如上图,StreamManager调用openStream方法,返回file对象的封装,至此,流程结束。
总结
RpcEnvFileServer作用于driver程序,为executor提供jar和file的远程下载服务,内部实现有两个,NettyStreamManager、HttpBasedFileServer,底层实现分别为netty和jetty,同时介绍了RpcEnvFileServer提供下载服务的流程,下一篇,我们查看executor如何远程下载jar的。
- Spark RPC之RpcEnvFileServer
- spark 2.0 RpcEnvFileServer
- Spark RPC之RpcEndpointVerifier
- Spark RPC之Master实现
- Spark RPC之Worker实现
- Spark RPC之Netty启动
- Spark RPC之RpcResponse处理
- spark源码解析 spark-core之rpc
- Spark RPC之Dispatcher、Inbox、Outbox
- Spark RPC之RpcRequest请求处理流程
- Spark RPC
- spark源码之sparkEnv(1)RPC通信
- Spark Rpc通信分析
- Spark RPC概述
- Spark 1.6RPC解析
- Spark RPC源码剖析
- Spark Rpc通信源码分析
- Spark Rpc通信源码分析
- Spring的AOP原理
- 表达式求值(顺序栈实现)
- 6. ZigZag Conversion
- Backtrader量化平台教程(二):Strategy类
- jvm
- Spark RPC之RpcEnvFileServer
- 设计模式学习--解释器模式
- pycharm搭建django
- 动态联编/运行时联编和静态联编
- Error Function in PeopleSoft
- Darwin Streaming Server 核心代码分析
- oc——类——MRC ARC
- 算法(第4版本)1.1.28
- Oracle、MySql、SQLServer 数据分页查询