SparkConf源码解读
在新启动一个spark作业的同时,我们需要去创建一个上下文对象,不论是spark-sql,还是spark-core亦或是spark-streaming,每一个上下文都会依赖一个SparkConf对象,在spark作业调优的过程中,SparkConf这个对象起了至关重要的作用。
1. 核心参数在SparkConf对象中如何保存:
1 | private val settings = new ConcurrentHashMap[String, String]() |
所有配置项都保存在对应的ConcurrentHashMap当中,而且配置的key和value都是string类型的变量
2. 核心方法set
1 | private[spark] def set(key: String, value: String, silent: Boolean): SparkConf = { |
3. 常用的一些方法的实现
1 | /** |
实际上调用的都是set()方法,但就是提供一个便捷的接口去设置一些常用参数
4. loadDefaults构造
1 | class SparkConf(loadDefaults: Boolean) extends Cloneable with Logging with Serializable {} |
默认构造SparkConf的过程中需要传入一个布尔型变量去标识是否要从系统参数中load对应spark的参数,但是默认就是需要去load的,具体逻辑如下:
1 | /** Create a SparkConf that loads defaults from system properties and the classpath */ |
通过Utils.getSystemProperties去获取当前环境中的变量类型,并通过守卫去过滤掉一些不必要的参数,实际上系统中以spark
开头的参数都会被导入进来;
Utils.getSystemProperties方法定义如下:
1 |
|
5. Cloneable特性
SparkConf对象继承了Cloneable对象并提供了一个clone方法,用以将对象的复制和传播
1 | class SparkConf(loadDefaults: Boolean) extends Cloneable with Logging with Serializable { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 tyrantlucifer!
评论