最后
针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。
最新整理面试题
上述的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题
最新整理电子书
最新整理大厂面试文档
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
-
- 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.
*/
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的API进行设置
-
从其他SparkConf中克隆
线程、数据库、算法、JVM、分布式、微服务、框架、Spring相关知识
一线互联网P7面试集锦+各种大厂面试集锦
学习笔记以及面试真题解析
知识
[外链图片转存中…(img-vrEPZ1Pp-1715647578339)]
一线互联网P7面试集锦+各种大厂面试集锦
[外链图片转存中…(img-UuQ83hJG-1715647578340)]
学习笔记以及面试真题解析
[外链图片转存中…(img-2qwv99dC-1715647578340)]