Spark-源码学习-SparkCore-数据传输-块传输-架构设计
一、概述
由于 Spark 是分布式部署,每个Task最终都运行在不同的机器节点上。map 任务的输出结果直接存储到map任务所在机
器的存储体系中,reduce 任务有可能不在同一机器上运行,所以需要远程下载map任务的中间输出。
NettyBlockTransferService提供了可以被其他节点的客户端访问的 Shuffle服务。
二、架构设计
三、初始化
BlockManager 在初始化的时候调用NettyBlockTransferService的init!)方法进行初始化,NettyBlockTransferService 只
有在被初始化后才提供服务
- 创建 NettyBlockRpcServer。 NettyBlockRpcServer继承了RpcHandler,服务端对客户端的Block读写请求的处理都
交给了RpcHandler的实现类,NettyBlockRpcServer 处理 Block块的 RPC 请求。 - 准备客户端引导程序TransportClientBootstrap和服务端引导程序TransportServer-Bootstrap。
- 创建TransportContext。
- 创建传输客户端工厂 TransportClientFactory。
- 创建 TransportServer。
- 获取当前应用的 ID
四、传输客户端
如果没有部署外部的 Shuffle 服务,即 spark.shuffle.service.enabled 属性为 false 时,NettyBlockTransferService 不但通过
OneForOneStreamManager与 NettyBlockRpcServer 对外提供 Block 上传与下载的服务,也将作为默认的 Shuffle 客户端。NettyBlockTransferService 作为 Shuffle 客户端,具有发起上传和下载请求并接收服务端响应的能力
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Joker!
评论
ValineTwikoo