Spark中RpcEnv和SparkEnv的区别




1: RpcEnv是一个更宏观的Env,是Spark集群Rpc通信的基础服务环境。 每一个RpcEndPoint都有自己的RpcEnv。因此在集群启动时候,所有的节点(无论Master还是Worker)都会创建一个RpcEnv,然后将该节点注册到RpcEnv中。

RpcEnv在Spark2.x版本之后就只有Netty的实现了,因此看一下RpcEnv和NettyRpcEnv的声明:


private[spark] abstract class RpcEnv(conf: SparkConf)

/**
  * 类似于Akka的ActorSystem,持有所有endpoint的引用的环境
  * endpoint类似于Akka的actor
  * EndpointRef类似于ActorRef )
  * @param conf
  * @param javaSerializerInstance
  * @param host
  * @param securityManager
  */
private[netty] class NettyRpcEnv(
                                  val conf: SparkConf,
                                  javaSerializerInstance: JavaSerializerInstance,
                                  host: String,
                                  securityManager: SecurityManager) extends RpcEnv(conf)




2:SparkEnv简单说其实就是一个Spark App的运行环境,SparkEnv中包含一系列的成员,例如:序列化器,RpcEnv,mapOutputTracker,shuffleManager,broadcastManager等。存在一个RpcEnv成员的原因是:该rpcEnv是Driver的rpc环境,因为Driver也需要和集群节点进行通信。在提交一个作业之后,在初始化SparkContext时候会创建SparkEnv。SparkEnv其实就是Driver的RpcEnv环境!



class SparkEnv (
    val executorId: String,
    private[spark] val rpcEnv: RpcEnv,
    val serializer: Serializer,
    val closureSerializer: Serializer,
    val serializerManager: SerializerManager,
    val mapOutputTracker: MapOutputTracker,
    val shuffleManager: ShuffleManager,
    val broadcastManager: BroadcastManager,
    val blockManager: BlockManager,
    val securityManager: SecurityManager,
    val metricsSystem: MetricsSystem,
    val memoryManager: MemoryManager,
    val outputCommitCoordinator: OutputCommitCoordinator,
    val conf: SparkConf) extends Logging






你可能感兴趣的:(Spark中RpcEnv和SparkEnv的区别)