sparkEnv——spark的执行环境

sparkEnv——spark的执行环境

1.创建的组件

组件 作用
securityManager 主要对帐号、权限以及身份认证进行设置和管理
rpcEnv RpcEndpoint 的运行环境,管理 RpcEndpoint 的整个生命周期
SerializerManager 为spark提供序列化、压缩和加密的管理器
BroadcastManager 负责Broadcast的创建和销毁
mapOutputTracker 用于跟踪map阶段任务的输出状态,此状态便于reduce阶段任务获取地址以及中间输出结果
shuffleManager 负责 shuffle 过程的执行、计算、处理的组件主要是 ShuffleManager
MemoryManager 内存管理器,有动态和静态可选,管理存储内存空间和执行内存空间
blockManager 负责对block管理,BlockManager是分布式结构,在driver和所有executor上都会有blockmanager节点,每个节点上存储的block信息都会汇报给driver端的blockManagerMaster作统一管理
metricsSystem 度量系统的各项指标的,比如说可以度量driver,worker,executor端的jvm相关的信息
outputCommitCoordinator 输出提交控制器,用于判定task是否拥有将output提交到HDFS的权限

2.代码解析

2.1会根据diver和excutor分别创建的sparkenv

为diver创建sparkEnv的参数

 create(
      conf,
      SparkContext.DRIVER_IDENTIFIER,
      bindAddress,
      advertiseAddress,
      port,
      isLocal,
      numCores,
      ioEncryptionKey,
      listenerBus = listenerBus,
      mockOutputCommitCoordinator = mockOutputCommitCoordinator
    )

为excutor创建sparkEnv的参数

val env = create(
      conf,
      executorId,
      hostname,
      hostname,
      port,
      isLocal,
      numCores,
      ioEncryptionKey
    )

其中creat方法参数如下,其中:

1.conf:sparkconf,在创建各个组件时会用到conf,主要是取出conf里的配置参数
2.executorId:val isDriver = executorId == SparkContext.DRIVER_IDENTIFIER用以判断当前的节点是diver还是excutor
3.bindAddress:绑定侦听的主机名或IP地址
4.advertiseAddress:驱动程序的主机名或IP地址
5.isLocal:是否是本地模式
6.numUsableCores:本地模式下用于diver驱动模式的核心数
7.ioEncryptionKey:io密钥,用于SerializerManager 和securityManager 中
8.LiveListenerBus :监听队列
9.mockOutputCommitCoordinator:输出提交控制器

	create(
      conf: SparkConf,
      executorId: String,
      bindAddress: String,
      advertiseAddress: String,
      port: Int,
      isLocal: Boolean,
      numUsableCores: Int,
      ioEncryptionKey: Option[Array[Byte]],
      listenerBus: LiveListenerBus = null,
      mockOutputCommitCoordinator: Option[OutputCommitCoordinator] = None)

从可以比较出diver的sparkEnv对象和excutor的sparkEnv对象的不同
excutorexcutor的参数bindAddress和advertiseAddress为hostname,并且没有listenerBus与mockOutputCommitCoordinator,因为excutor作为执行器无需监听其他节点的状态。

2.2创建各个组件的代码

  private def create(
      conf: SparkConf,
      executorId: String,
      bindAddress: String,
      advertiseAddress: String,
      port: Int,
      isLocal: Boolean,
      numUsableCores: Int,
      ioEncryptionKey: Option[Array[Byte]],
      listenerBus: LiveListenerBus = null,
      mockOutputCommitCoordinator: Option[OutputCommitCoordinator] = None): SparkEnv = {
   

    val isDriver = executorId == SparkContext.DRIVER_IDENTIFIER

    // Listener bus is only used on the driver
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值