【Spark核心原始碼】SparkConf,Spark的配置管控
目錄
概述
SparkConf,以KEY-VALUE對的形式設定Spark的配置引數。我們編寫Spark應用程式時,也會先建立SparkConf,並配置一些引數,再傳遞給SparkContext。下面試對SparkConf的原始碼進行的分析。
SparkConf位於Spark Core中的org.apache.spark包下。分別繼承了Cloneable、Logging和Serializable。
SparkConf分別實現了一個有參和無參的構造方法,這個引數loadDefaults是布林型別的,控制SparkConf是否從系統中獲取以“spark”開頭的配置引數。無參構造方法,預設loadDefaults=true
SparkConf所有的配置資訊都是以KEY-VALUE對的形式儲存在settings中,key、value都是String型別的。
SparkConf又是如何向settings中put資料的呢?下面就是put資料的核心程式碼,並不難理解。
Spark的配置通過三種方式獲取:
- 系統引數中以“spark.”開頭的屬性
- 使用SparkConf提供的方法設定
- 克隆其他的SparkConf
從系統中獲取並設定配置資訊
預設loadDefaults=true,所以會執行loadFromSystemProperties方法,利用if守衛,篩選出key以“spark.”開頭的資訊,並增加到settings中。
使用SparkConf提供的方法設定配置資訊
基於set方法,SparkConf進行了一系列擴充套件,提供了N多個方法,用於使用者自己配置SparkConf引數。
設定“spark.master”
設定“spark.app.name”
設定“spark.jars”,告訴Spark還要載入哪些jar包
設定“spark.executorEnv.”
設定“spark.home”
批量設定和自定義設定
還有一些方法,不僅有設定引數的(set)還有可以獲取引數的(get),這裡就不一一列舉出來了,太多了。
通過克隆的方式設定配置資訊
SparkConf繼承了Cloneable,並重寫了clone方法,所以可以使用克隆的方式設定配置資訊。
總結
SparkConf以key-value的形式管理Spark的配置資訊,這些配置資訊主要是從系統中載入進來的(系統資訊中篩選以“spark.”開通的配置資訊),使用人員自定義的(通過SparkConf提供的方法),或者是通過克隆其他SparkConf物件得到的。
Spark是不支援在執行期間修改SparkConf配置資訊的。