最新Spark源码阅读01-SparkConf,阿里巴巴发布“限量版”Java零基础宝典

最后

针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。

最新整理面试题
在这里插入图片描述

上述的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题

最新整理电子书

在这里插入图片描述

最新整理大厂面试文档

在这里插入图片描述

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

    • SparkConf的介绍
  • SparkConf类的定义介绍

  • SparkConf配置项的设置

  • SparkConf配置项的获取

  • SparkConf配置项的校验

SparkConf的介绍


SparkConf用于管理Spark所有的配置项,不论是使用旧的SparkContext作为访问Spark的入口,还是使用新提供的SparkSession统一访问入口,我们会使用SparkConf设置各类参数,并传递给SparkContext或SparkSession。

/**

  • Configuration for a Spark application. Used to set various Spark parameters as key-value pairs.

  • Most of the time, you would create a SparkConf object with new SparkConf(), which will load

  • values from any spark.* Java system properties set in your application as well. In this case,

  • parameters you set directly on the SparkConf object take priority over system properties.

  • For unit tests, you can also call new SparkConf(false) to skip loading external settings and

  • get the same configuration no matter what the system properties are.

  • All setter methods in this class support chaining. For example, you can write

  • new SparkConf().setMaster("local").setAppName("My app").

  • @param loadDefaults whether to also load values from Java system properties

  • @note Once a SparkConf object is passed to Spark, it is cloned and can no longer be modified

  • by the user. Spark does not support modifying the configuration at runtime.

*/

SparkConf类的定义介绍


class SparkConf(loadDefaults: Boolean) extends Cloneable with Logging with Serializable {

import SparkConf._

/** Create a SparkConf that loads defaults from system properties and the classpath

  • 默认无参的构造方法,会传入loadDefaults为true

  • */

def this() = this(true)

// 用于存放配置的Map(线程安全的ConcurrentHashMap对象)

private val settings = new ConcurrentHashMapString, String

// 配置读取器,使用懒加载方法初始化

@transient private lazy val reader: ConfigReader = {

// SparkConfigProvider对settings字典进行了包装

val _reader = new ConfigReader(new SparkConfigProvider(settings))

_reader.bindEnv(new ConfigProvider {

override def get(key: String): Option[String] = Option(getenv(key))

})

_reader

}

// 当该参数为true时,会从系统属性中加载Spark的配置

if (loadDefaults) {

loadFromSystemProperties(false)

}

private[spark] def loadFromSystemProperties(silent: Boolean): SparkConf = {

// Load any spark.* system properties

// 获取系统跟属性并加载以spark.开头的

for ((key, value) <- Utils.getSystemProperties if key.startsWith(“spark.”)) {

set(key, value, silent)

}

this

}

/** Set a configuration variable. */

def set(key: String, value: String): SparkConf = {

set(key, value, false)

}

private[spark] def set(key: String, value: String, silent: Boolean): SparkConf = {

// 校验参数

if (key == null) {

throw new NullPointerException(“null key”)

}

if (value == null) {

throw new NullPointerException("null value for " + key)

}

// 如果不是静默添加,设置丢弃的配置会打印提示

if (!silent) {

logDeprecationWarning(key)

}

// 设置到setting中

settings.put(key, value)

this

}

private[spark] def set[T](entry: ConfigEntry[T], value: T): SparkConf = {

set(entry.key, entry.stringConverter(value))

this

}

private[spark] def set[T](entry: OptionalConfigEntry[T], value: T): SparkConf = {

set(entry.key, entry.rawStringConverter(value))

this

}

…//后面的代码省略

}

(1) loadDefaults参数决定是否加载System Properties中的属性。

/** Create a SparkConf that loads defaults from system properties and the classpath

  • 默认无参的构造方法,会传入loadDefaults为true

  • */

def this() = this(true)

如果loadDefaults参数为true,将会调用loadFromSystemProperties(…)方法加载相应的属性。

// 当该参数为true时,会从系统属性中加载Spark的配置

if (loadDefaults) {

loadFromSystemProperties(false)

}

private[spark] def loadFromSystemProperties(silent: Boolean): SparkConf = {

// Load any spark.* system properties

// 获取系统跟属性并加载以spark.开头的

for ((key, value) <- Utils.getSystemProperties if key.startsWith(“spark.”)) {

set(key, value, silent)

}

this

}

(2)SparkConf还在其伴生对象中定义了废弃的配置项以及一些在不同版本中发生变化的配置项

private val deprecatedConfigs: Map[String, DeprecatedConfig] = {

val configs = Seq(

DeprecatedConfig(“spark.cache.class”, “0.8”,

"The spark.cache.class property is no longer being used! Specify storage levels using " +

“the RDD.persist() method instead.”),

…//配置过多省略了

)

Map(configs.map { cfg => (cfg.key -> cfg) } : _*)

}

// 在不同版本中发生变化的配置项

// configsWithAlternatives则使用键值对的形式表示新旧配置项的变化,键为字符串,

// 表示配置项新的名称,值为AlternateConfig序列,包含多个AlternateConfig对象,

// AlternateConfig中的两个字符串参数分别表示配置项旧的名称以及出现的版本号

private val configsWithAlternatives = Map[String, Seq[AlternateConfig]](

“spark.executor.userClassPathFirst” -> Seq(

AlternateConfig(“spark.files.userClassPathFirst”, “1.3”)),

… //配置过多省略了

private val allAlternatives: Map[String, (String, AlternateConfig)] = {

configsWithAlternatives.keys.flatMap { key =>

configsWithAlternatives(key).map { cfg => (cfg.key -> (key -> cfg)) }

}.toMap

}

其中,

deprecatedConfigs使用的DeprecatedConfig中的三个字符串参数分别代表废弃的配置项名称、在哪个版本被废弃的以及废弃提示说明;configsWithAlternatives则使用键值对的形式表示新旧配置项的变化,键为字符串,表示配置项新的名称,值为AlternateConfig序列,包含多个AlternateConfig对象,

AlternateConfig中的两个字符串参数分别表示配置项旧的名称以及出现的版本号。

SparkConf配置项的设置


SparkConf配置项的设置有如下三种方法:

  • 来源于系统参数

  • 使用SparkConf的API进行设置

  • 从其他SparkConf中克隆

线程、数据库、算法、JVM、分布式、微服务、框架、Spring相关知识

一线互联网P7面试集锦+各种大厂面试集锦

学习笔记以及面试真题解析

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

知识

[外链图片转存中…(img-vrEPZ1Pp-1715647578339)]

一线互联网P7面试集锦+各种大厂面试集锦

[外链图片转存中…(img-UuQ83hJG-1715647578340)]

学习笔记以及面试真题解析

[外链图片转存中…(img-2qwv99dC-1715647578340)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值