1. 程式人生 > >【Spark核心原始碼】SparkConf,Spark的配置管控

【Spark核心原始碼】SparkConf,Spark的配置管控

目錄

概述

從系統中獲取並設定配置資訊

使用SparkConf提供的方法設定配置資訊

通過克隆的方式設定配置資訊

 總結


概述

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的配置通過三種方式獲取:

  1. 系統引數中以“spark.”開頭的屬性
  2. 使用SparkConf提供的方法設定
  3. 克隆其他的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配置資訊的。