spark源码:SparkContext初始化需要启动的组件

本文详细介绍了SparkContext的初始化过程,包括启动的组件如SparkEnv、LiveListenerBus、SparkUI等,以及SparkContext的内部组件,如DAGScheduler、TaskScheduler和ExecutorAllocationManager等,阐述了它们在Spark程序中的角色和功能。
摘要由CSDN通过智能技术生成

1.SparkContext简介

  • Main entry point for Spark functionality. A SparkContext represents the connection to a Spark
  • spark 程序的主入口。sc 表示 和一个spark集群的连接,
  • cluster, and can be used to create RDDs, accumulators and broadcast variables on that cluster.
    可以用来在这个集群上 创建rdd ,计算和 广播变量。
  • Only one SparkContext may be active per JVM. You must stop() the active SparkContext before
  • 每个jvm上只有一个sc 是活跃的。 在创建一个新的sc 之前必须调用 stop 方法来 停掉之前的sc
  • creating a new one. This limitation may eventually be removed; see SPARK-2243 for more details.
  • 这个限制可能会被移除。

2 初始化SparkContext需要启动的组件

2.0 SparkContext私有的可变成员变量

 /* ------------------------------------------------------------------------------------- *
   | Private variables. These variables keep the internal state of the context, and are    |
   | not accessible by the outside world. They're mutable since we want to initialize all  |
   | of them to some neutral value ahead of time, so that calling "stop()" while the       |
   | constructor is still running is safe.                                                 |
   * ------------------------------------------------------------------------------------- */

  private var _conf: SparkConf = _
  //sparkconf 配置
  private var _eventLogDir: Option[URI] = None
  private var _eventLogCodec: Option[String] = None
  private var _listenerBus: LiveListenerBus = _
  private var _env: SparkEnv = _
  private var _statusTracker: SparkStatusTracker = _
  private var _progressBar: Option[ConsoleProgressBar] = None
  private var _ui: Option[SparkUI] = None
  private var _hadoopConfiguration: Configuration = _
  private var _executorMemory: Int = _
  private var _schedulerBackend: SchedulerBackend = _
  private var _taskScheduler: TaskScheduler = _
  private var _heartbeatReceiver: RpcEndpointRef = _
  @volatile private var _dagScheduler: DAGScheduler = _
  private var _applicationId: String = _
  private var _applicationAttemptId: Option[String] = None
  private var _eventLogger: Option[EventLoggingListener] = None
  private var _executorAllocationManager: Option[ExecutorAllocationManager] = None
  private var _cleaner: Option[ContextCleaner] = None
  private var _listenerBusStarted: Boolean = false
  private var _jars: Seq[String] = _
  private var _files: Seq[String] = _
  private var _shutdownHookRef: AnyRef = _
  private var _statusStore: AppStatusStore = _

2.1 SpaekEnv

Spark运行时的环境。无论是driver端还是excutor端都依赖于SparkEnv所提供的运行环境。

2.2 LiveListenerBus

SparkContext的事件总线。接受使用方发送的事件。并且通过异步的方式对事件进行匹配后调用SparkListener的不同方法。

2.3 SparkUI

Spark用户界面。SparkUI间接依赖于计算引擎、调度系统、存储体系,job、stage、存储、Executor等组件的监控数据都以SparkListenerEvent的格式投递到LiveListenerBus,SparkUI从SparkListener中读取数据显示到web页面。

2.4 SparkStatusTracker

提供对job、stage的监控信息。低级API,只能提供非常弱的一致性机制。

2.5 ConsoleProgressBar

利用SparkStatusTracker的API,在控制台展示Stage的进度。由于依赖SparkStatusTracker,所以在控制台展示的进度会存在延时。

2.6 DAGScheduler

属于spark的调度系统成员。将application中的RDD按照依赖属性划分到不同的stage,并且提交stage.创建job。

2.7 TaskScheduler

属于Spark的调度系统成员。TaskScheduler按照调度算法对集群管理器已经分配给应用程序的资源进行二次调度后分配给任务。TaskScheduler所调度的task是DAGScheduler创建的。DAGScheduler是TaskScheduler的前置调度。

2.8 HeartbeatReceiver

心跳接受器。所有的Executor会向HeartbeatReceiver发送心跳。HeartbeatReceiver接受心跳之后先更新Executor的最后可见时间,然后将此信息交给TaskScheduler进一步处理。

2.9 ContextCleaner

上下文清理器。使用异步清理的方式,清理超出应用作用域的RDD、ShuffleDependency、和广播的变量broadcast。

2.10 JobProgressListener

作业进度监听器。 会注册到liveListenerBus作为监听器之一使用。

2.11 EventLoggingListener

将事件持久化到存储的 监听器。当spark.eventLog.enabled属性 为true 时开启。

2.12 ExecutorAllocationManager

Executor动态分配管理器。根据工作负载动态调整Executor的数量。配置 spark.dynamicAllocation.enabled 的true前提下,在非local 模式下或 spark.dynamicAllication.testing 为true 时启用。

2.13 ShutdownHookManager

用于设置关闭钩子的管理器。可以给应用设置关闭钩子,这样就可以在 jvm 进程退出时,执行一些清理工作。

3 SparkContext 的其他内部组件

3.1 creationSite

类型:CallSite,保存线程栈中最靠近栈顶的用户定义的类。以及最靠近栈底的scala或spark核心类信息,callSite的shortForm 属性保存以上的简短描述,longForm保存着以上信息的的完整描述。

3.2 allowMultioleContext

是否允许多个SparkContext实例。 参数:spark.allowMultipleContext 控制。

3.3 startTime

SparkContext 启动时间戳。

3.4 stopped

SparkContext 是否已经停止的状态。

3.5 addedFiles

用于每个本地文件的Url与添加此文件的addedFiles时的时间戳之间的的映射缓存。

3.6 addedJars

用于每个本地jar与添加此JAR到addedJars时的时间戳之间的映射缓存。

3.7 persistentRdds

对所有持久化的Rdd保持跟踪。

3.8 executorEnvs

用于存储环境变量。executorEnvs中的环境变量都讲传递给执行任务的 Executor。

3.9 sparkUser

当前系统的登录用户,或者通过SPARK_USER进行设定。

3.10 checkPointDir

RDD计算过程中保存检查点时所需要的目录。

3.11 localProperties

3.12 _conf

SparkContext 的配置,调用SparkContext的clone方法的克隆而来。

3.13 _jars

用户设置的jar文件。当部署模式为YARN时,_jars由spark.jars 和spark.yarn.dist.jars的并集。
其他部署模式为spark.jars

3.14 _files

用户设置的文件。 通过spark.files进行指定。

3.15 _eventLogDir

spark.eventLog.enabled为true时启用。 通过spark.eventLog.dir 指定目录 默认为 /tmp/spark-events

3.16 _eventLogCodec

事件日志的的压缩算法。 压缩算法默认 为lz4,支持的压缩算法包括:lz4、snappy、lzf.

3.17 _hadoopConfiguration

hadoop的配置信息。

3.18 _executorMemory

Executor的内存大小。

3.19 _applicationId

3.20 _applicationAttemptId

3.21 _listenerBusStarted

LiveListenerBus是否已经启动的标记

3.22 nextShuffleID

生成下一个Shuffle的身份标识

3.23 nextRddID

生成下一个RDD的身份标识。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值