//初始化spark配置
private var _conf: SparkConf = _
private var _eventLogDir: Option[URI] = None
private var _eventLogCodec: Option[String] = None
private var _listenerBus: LiveListenerBus = _
//初始化spark環(huán)境迎献,SparkEnv下文詳細(xì)介紹
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 = _
//是一個(gè)trait
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 = _
SparkContext在Spark應(yīng)用程序的執(zhí)行過(guò)程中起著主導(dǎo)作用刑枝,它負(fù)責(zé)與程序個(gè)Spark集群進(jìn)行交互著拭,包括申請(qǐng)集群資源唤冈、創(chuàng)建RDD帅容、accumulators 及廣播變量等颇象。SparkContext與集群資源管理器、Worker結(jié)節(jié)點(diǎn)交互圖如下圖所示并徘。
官網(wǎng)對(duì)圖下面幾點(diǎn)說(shuō)明:
(1)不同的Spark應(yīng)用程序?qū)?yīng)該不同的Executor遣钳,這些Executor在整個(gè)應(yīng)用程序執(zhí)行期間都存在并且Executor中可以采用多線程的方式執(zhí)行Task。這樣做的好處是麦乞,各個(gè)Spark應(yīng)用程序的執(zhí)行是相互隔離的蕴茴。除Spark應(yīng)用程序向外部存儲(chǔ)系統(tǒng)寫(xiě)數(shù)據(jù)進(jìn)行數(shù)據(jù)交互這種方式外,各Spark應(yīng)用程序間無(wú)法進(jìn)行數(shù)據(jù)共享姐直。
(2)Spark對(duì)于其使用的集群資源管理器沒(méi)有感知能力倦淀,只要它能對(duì)Executor進(jìn)行申請(qǐng)并通信即可。這意味著不管使用哪種資源管理器声畏,其執(zhí)行流程都是不變的晃听。這樣Spark可以不同的資源管理器進(jìn)行交互。
(3)Spark應(yīng)用程序在整個(gè)執(zhí)行過(guò)程中要與Executors進(jìn)行來(lái)回通信砰识。
(4)Driver端負(fù)責(zé)Spark應(yīng)用程序任務(wù)的調(diào)度能扒,因此最好Driver應(yīng)該靠近Worker節(jié)點(diǎn)。