Spark RPC之RpcEnvFileServer


概要


spark运行时executor可能需要远程下载driver上的jar或文件到本地,对应的内部实现为:

  • 父类:RpcEnvFileServer
  • 子类:NettyStreamManagerHttpBasedFileServer,底层分别由netty、jetty实现
    根据参数spark.rpc.useNettyFileServer配置,如下:
    (没找到是在哪儿判断的,是放弃了http,只用Netty吗?)
    在这里插入图片描述

1. 父类:RpcEnvFileServer


在这里插入图片描述
如上,RpcEnvFileServer定义两个抽象方法,addFileaddJar,用于将jar和file添加到文件服务器,提供下载服务,其实现类有HttpBasedFileServer、NettyStreamManager。

1.1 子类:HttpBasedFileServer

HttpBasedFileServer底层由jetty实现。
在这里插入图片描述
如上图,HttpBasedFileServer继承RpcEnvFileServer,同时拥有属性HttpFileServer,HttpFileServer拥有属性HttpServer,HttpServer中start方法调用doStart方法,doStart方法中启动jetty server,提供文件下载服务,doStart方法中启动jetty server代码如下(对源码稍作整理)
在这里插入图片描述
下面查看启动基于jetty server的文件服务器的流程
在这里插入图片描述

分为以下两部分

  1. driver程序启动,初始化SparkContext时启动jetty server,流程如上图①至⑨,其中jetty server文件服务器的根目录为HttpFileServer的baseDir目录(默认为/tmp/UUID),下面有两个二级目录jars、files分别存放jar和file
  2. 调用SparkContext的addJar方法依次将driver程序和spark-submit中指定的jar包copy到jetty文件服务器的baseDir/jars目录下,如上图②⑩⑪⑫流程。

至此,executor执行task时,就可以根据driverURL和收到的jar包名连接jetty,远程下载jar包了,具体参考下一篇博客。

1.2 子类:NettyStreamManager

NettyStreamManager借助于RpcEnv中启动的netty提供服务,请参考Spark RPC之Netty启动
在这里插入图片描述
如上图,NettyStreamManager和HttpBasedFileServer不同,其没有将文件写入本地 :

  • 而是使用两个属性jarsfiles集合保存,对应的addJar方法就是将File对象添加到集合jars中
  • 下载文件依靠openStream方法,结果封装为ManagedBuffer返回(ManagedBuffer的概念在Spark RPC之RpcRequest请求处理流程有介绍),
  • openStream方法继承自StreamManagerStreamManager提供底层文件的下载服务

如shuffle过程中间结果的下载,后续详细介绍,UML如下
在这里插入图片描述

NettyStreamManager处理请求和RPC相似,如下
在这里插入图片描述
流程简单,不详细介绍,完整流程参考Spark RPC之RpcResponse处理 (除请求类型不同外,流程一致),再贴出上述流程中的两处源码 :
在这里插入图片描述
TransportRequestHandlerhandle方法,根据请求消息类型,分别处理。
在这里插入图片描述
handle方法中处理Stream请求的processStreamRequest方法,如上图,StreamManager调用openStream方法,返回file对象的封装,至此,流程结束。

总结

RpcEnvFileServer作用于driver程序,为executor提供jar和file的远程下载服务,内部实现有两个,NettyStreamManager、HttpBasedFileServer,底层实现分别为netty和jetty,同时介绍了RpcEnvFileServer提供下载服务的流程。
下一篇,我们查看executor如何远程下载jar的。

致谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值