spark啓動過程sparkconf實例化

SparkConf 的構造很簡單,主要是通過 ConcurrentHashMap 來維護各種 Spark 的配置屬性。 Spark 的配置屬性都是以“spark.”開頭的字符串。
這裏寫圖片描述
現在開始介紹 SparkContext。 SparkContext 的初始化步驟如下:
1)創建 Spark 執行環境 SparkEnv;
2)創建 RDD 清理器 metadataCleaner;
3)創建並初始化 Spark UI;
4) Hadoop 相關配置及 Executor 環境變量的設置;
5)創建任務調度 TaskScheduler;
6)創建和啓動 DAGScheduler;
7) TaskScheduler 的啓動;
8)初始化塊管理器 BlockManager(BlockManager 是存儲體系的主要組件之一,將在第 4
章介紹);
9)啓動測量系統 MetricsSystem;
10)創建和啓動 Executor 分配管理器 ExecutorAllocationManager;
11) ContextCleaner 的創建與啓動;
12) Spark 環境更新;
13)創建 DAGSchedulerSource 和 BlockManagerSource;
14)將 SparkContext 標記爲激活。
SparkContext 的主構造器參數爲 SparkConf,其實現如下。

class SparkContext(config: SparkConf) extends Logging with ExecutorAllocationClient {
private val creationSite: CallSite = Utils.getCallSite()
private val allowMultipleContexts: Boolean =
config.getBoolean("spark.driver.allowMultipleContexts", false)
SparkContext.markPartiallyConstructed(this, allowMultipleContexts)

上面代碼中的 CallSite 存儲了線程棧中最靠近棧頂的用戶類及最靠近棧底的 Scala 或者Spark 核心類信息。 Utils.getCallSite 的詳細信息見附錄 A。 SparkContext 默認只有一個實例(由屬性spark.driver.allowMultipleContexts 來控制,用戶需要多個 SparkContext 實例時,可以將其設置爲 true),方法 markPartiallyConstructed 用來確保實例的唯一性,並將當前 SparkContext標記爲正在構建中。
接下來會對 SparkConf 進行復制,然後對各種配置信息進行校驗,代碼如下。

private[spark] val conf = config.clone()
conf.validateSettings()
if (!conf.contains("spark.master")) {
throw new SparkException("A master URL must be set in your configuration")
}
if (!conf.contains("spark.app.name")) {
throw new SparkException("An application name must be set in your configuration")
}

從上面校驗的代碼看到必須指定屬性 spark.master 和 spark.app.name,否則會拋出異常,結束初始化過程。 spark.master 用於設置部署模式, spark.app.name 用於指定應用程序名稱。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章