spark源码分析二(NettyRpcEnv)

本文深入分析Spark源码中的NettyRpcEnv,重点探讨dispatcher分发机制和startServer过程。dispatcher作为消息分发核心,通过EndpointData进行消息路由。startServer启动TransportServer,并注册RpcEndpoint,它是Spark Master、Worker通信的基础。文章详细阐述了RpcEnv的初始化、消息处理及服务器启动流程。
摘要由CSDN通过智能技术生成

NettyRpcEnv

源码版本2.4.7
需要关注的是env里面几个关键的属性和方法如图:
在这里插入图片描述

1 dispatcher 分发

消息分发程序,负责将RPC消息路由到适当的端点
dispatcher的成员内部类: EndpointData实体

  private class EndpointData(
      val name: String,
      val endpoint: RpcEndpoint,
      val ref: NettyRpcEndpointRef) {
   
    val inbox = new Inbox(ref, endpoint)
  }

Inbox:收件箱,用于存储[[RpcEndpoint]]的消息并以线程安全的方式向其发布消息
process处理消息,且OnStart消息也是在此产生

  // OnStart should be the first message to process
  inbox.synchronized {
   
    messages.add(OnStart)
  }
   /**
   * Process stored messages.
   */
  def process(dispatcher: Dispatcher): Unit = {
   
    var message: InboxMessage = null
    inbox.synchronized {
   
      if (!enableConcurrent && numActiveThreads != 0) {
   
        return
      }
      message = messages.poll()
      if (message != null) {
   
        numActiveThreads += 1
      } else {
   
        return
      }
    }
    while (true) {
   
      safelyCall(endpoint) {
   
        message match {
   
          case RpcMessage(_sender, content, context) =>
            try {
   
              endpoint.receiveAndReply(context).applyOrElse[Any, Unit](content, {
    msg =>
                throw new SparkException(s"Unsupported message $message from ${_sender}")
              })
            } catch {
   
              case e: Throwable =>
                context.sendFailure(e)
                // Throw the exception -- this exception will be caught by the safelyCall function.
                // The endpoint's onError function will be called.
                throw e
            }

          case OneWayMessage(_sender, content
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值