Spark-2.4.0 源码学习系列《一 》 - SparkConf

SparkConf是Spark程序的配置类,以键值对的方式存储各种各样的Spark参数。通常情况下,可以通过 new SparkConf()来创建一个Sparkconf对象,这种方式会加载Java系统属性中任何以“spark.”开头的参数,并设置到应用程序中。SparkConf中设置的参数相较于系统属性具有优先级(会覆盖系统参数)。SparkConf中最重要的一个参数是settings,是一个ConcurrentHashMap[String, String],用来存储各种各样的参数。

下面我们来看一下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 */
  def this() = this(true) 

  private val settings = new ConcurrentHashMap[String, String]()

1. 调用SparkConf构造函数:def this() = this(true),可见new SparkConf()是可以传入参数的(默认true),这个参数代表是否要加载默认系统属性。

 2. 创建一个Map来存储参数:private val settings = new ConcurrentHashMap[String, String]()。ConcurrentHashMap是一个应用了锁分段技术的线程安全的具有并发能力的HashMap。 

@transient private lazy val reader: ConfigReader = {
    val _reader = new ConfigReader(new SparkConfigProvider(settings))
    _reader.bindEnv(new ConfigProvider {
      override def get(key: String): Option[String] = Option(getenv(key))
    })
    _reader
  }

  if (loadDefaults) {
    loadFromSystemProperties(false)
  }

3. 懒加载一个ConfigReader:一个用于读取配置信息和执行变量替换的帮助类。

4. 判断是否需要加载系统变量。

private final val avroNamespace = "avro.schema."

5. 定义avro命名空间变量。

SparkConf的伴生对象中也定义了几个常量,我们先来看一下:

private val deprecatedConfigs: Map[String, DeprecatedConfig] = {...}
private val configsWithAlternatives = Map[String, Seq[AlternateConfig]](...)
private val allAlternatives: Map[String, (String, AlternateConfig)] = {...}

1. 过期配置Map。配置参数的key和过期信息的映射。

 2. 当前key(过期的)和当前版本spark使用的key的映射。

 3. configsWithAlternatives视图,用于提升查询过期key的效率。

此外,SparkConf中还定义了一大堆的set,get方法,用于设置和获取Spark的配置信息。这里不再一一列举,在后面的源码学习中用到时再来看。

注:请尊重原创,转载请注明出处。该系列不定时更新。

猜你喜欢

转载自blog.csdn.net/Mathieu66/article/details/86658427
今日推荐