Spark Core源码精读计划 番外篇B-1:重回Spark RPC环境

目录

前言

又是很久没有连载,万分抱歉。今天(注:其实也包含昨天)需要盯着双11各个实时任务的运行,目前仍然无事发生,抽空来写几笔吧。

在前面的文章中,我们了解了块管理器BlockManager管理下的读写流程。并且已经知道,BlockManager读取块时,如果块在本地找不到,就会去集群内的远端节点去获取。同理,如果BlockManager写入块时需要复制,那么除了在本地写入之外,也要再写一份到远端节点。BlockManager与远端节点的交互就得依赖块传输服务BlockTransferService。但是BlockTransferService需要依赖之前偷懒没有讲过的RPC底层组件,所以现在得把这个坑填上,计划用3篇文章来填。

由于Spark 2.x的RPC环境是完全基于Netty搞的,所以如果看官对Netty有基本的了解的话,读起来会顺畅一点。

RPC底层概览

在系列的文章#8中,我们讲到了RPC环境——即NettyRpcEnv的构建和属性成员。来复习一下。

代码#B1.1 - o.a.s.rpc.netty.NettyRpcEnv中的部分属性成员

private[netty] val transportConf = SparkTransportConf.fromSparkConf(
    conf.clone.set("spark.rpc.io.numConnectionsPerPeer", "1"),
    "rpc",
    conf.getInt("spark.rpc.io.threads", 0))

  private val dispatcher: Dispatcher = new Dispatcher(this, numUsableCores)

  private val streamManager = new NettyStreamManager(this)

  private val transportContext = new TransportContext(transportConf,
    new NettyRpcHandler(dispatcher, this, streamManager))

  private val clientFactory = transportContext.createClientFactory(createClientBootstraps())

  @volatile private var server: TransportServer = _
  • TransportConf:传输配置,作用在RPC环境中类似于SparkConf,负责管理与RPC相关的各种配置。
  • Dispatcher:调度器,或者叫分发器,用于将消息路由到正确的RPC端点,它的逻辑在文章#9中已经讲过,就不再提了。
  • S
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农老K

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值