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)

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

被折叠的 条评论
为什么被折叠?



