Spark源码解析(二) SparkContext 初始化

本文深入剖析了Spark初始化过程,从SparkSession的getOrCreate()方法开始,详细解释了如何创建和获取SparkContext。内容涵盖SparkConf的设置、SparkContext的创建、SparkEnv的构建、TaskScheduler的初始化等多个关键步骤,展示了Spark启动任务管理的核心流程。

Spark 初始化SparkContext

上一次我们的源码跟踪到Spark通过反射来 获取我们所写的代码的main 方法。然后执行。我们都知道 我们的Spark编程的套路。
1:获取环境 SparkContext
2:添加source
3:数据处理
4:输出Sink
5:stop停止Spark任务 。
我们代码中的获取SparkSession的入口
val spark: SparkSession = SparkSession.builder.appName("Spark Pi").getOrCreate()
点击getOrCreate() 进入查看创建方法
这里 我们看这个源码可以看出来 我们获取的SparkSession 是在Spark2.x版本中对SparkContext的一个封装
              	// 这里创建SparkContext
                // No active nor global default session. Create a new one.
                val sparkContext: SparkContext = userSuppliedContext.getOrElse {
   
   
                    // 创建 SparkConf 中
                    val sparkConf = new SparkConf()
                    options.foreach {
   
    case (k, v) => sparkConf.set(k, v) }
                    
                    // set a random app name if not given.
                    if (!sparkConf.contains("spark.app.name")) {
   
   
                        sparkConf.setAppName(java.util.UUID.randomUUID().toString)
                    }
                    
                    // 根据SparkConf 来创建SparkContext
                    SparkContext.getOrCreate(sparkConf) // Do not update `SparkConf` for existing `SparkContext`, as it's shared by all sessions.
                }
                
                // Initialize extensions if the user has defined a configurator class.
                val extensionConfOption = sparkContext.conf.get(StaticSQLConf.SPARK_SESSION_EXTENSIONS)
                if (extensionConfOption.isDefined) {
   
   
                    val extensionConfClassName = extensionConfOption.get
                    try {
   
   
                        val extensionConfClass = Utils.classForName(extensionConfClassName)
                        val extensionConf = extensionConfClass.newInstance().asInstanceOf[SparkSessionExtensions => Unit]
                        extensionConf(extensions)
                    } catch {
   
   
                        // Ignore the error if we cannot find the class or when the class has the wrong type.
                        case e@(_: ClassCastException | _: ClassNotFoundException | _: NoClassDefFoundError) => logWarning(
                            s"Cannot use $extensionConfClassName to configure session extensions.", e)
                    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值