SparkContext两种创建过程
一、无Session的SparkContext的创建过程
val conf = new SparkConf()
val sc = new SparkContext("local","JSONRead",conf)
new SparkContext()
此处调用的是包含三个参数的构造方法,该构造方法通过将所有参数传入SparkConf
,最终调用只包含conf
的构造器.
def this(master: String, appName: String, conf: SparkConf) =
this(SparkContext.updatedConf(conf, master, appName))
\**
* SparkContext是spark功能的主入口,代表着集群的联接,可以用它在集群中创建RDDs,累加器和广播变量
* 每个jvm只能有一个SparkContext,再创建新的SparkContext之前需要先stop()当前活动的SparkContext,不过这种限制可能会在将来被移除
* 它的构造参数是SparkConf是当前app的配制。这个配置会覆盖默认的配置以及系统属性
* SparkContext的初始化步骤:
* 1.创建SparkEnv;
* 2.创建并且初始化Spark UI;
* 3.hadoop相关配置以及Executor环境变量的设置;
* 4.创建任务调度TaskScheduler,创建DAGScheduler;
* 5.TaskScheduler的启动;
* 6.初始化管理器BlockManager(BlockManager是存储体系的主要组件之一)
* 7.启动测量系统MetricsSystem;
* 8.创建和启动Executor分配管理器ExecutorAllocationManager;
* 9.创建DAGSchedulerSource和BlockManagerSource;
* 10.激活SparkContext
**/
class SparkContext(config: SparkConf) extends Logging {
}
-
Uitls.getCallSite()
它的作用就是用于打印执行过程中的堆栈信息.// The call site where this SparkContext was constructed. private val creationSite: CallSite = Utils.getCallSite()
-
在
SparkContext
构造函数的开头调用,以确保没有SparkContext
正在运行。如果检测到正在运行的上下文,则抛出异常;如果另一个线程正在构造SparkContext
,则记录一个警告。这个警告是必要的,因为当前的锁定方案使我们无法可靠地区分正在构造另一个上下文的情况和另一个构造函数抛出异常的情况SparkContext.markPartiallyConstructed(this)
-
用于将每个file / jar的URL与本地时间戳一起存储
// Used to store a URL for each static file/jar together with the file's local timestamp private[spark] val addedFiles = new ConcurrentHashMap[String, Long]().asScala private[spark] val addedJars = new ConcurrentHashMap[String, Long]().asScala
-
保持跟踪所有持久化的RDDs
// Keeps track of all persisted RDDs private[spark] val persistentRdds = { val map: ConcurrentMap[Int, RDD[_]] = new MapMaker().weakValues().makeMap[Int, RDD[_]]() map.asScala }
设置环境给
executors
使用// Environment variables to pass to our executors. private[spark] val executorEnvs = HashMap[String, String]() // 设置spark_User // Set SPARK_USER for user who is running SparkContext. val sparkUser = Utils.getCurrentUserName()
-
初始化
ThreadLocal
及子类InheritableThreadLocal
// Thread Local variable that can be use