本課主題
- 什麼是 Spark 的天堂之門
- Spark 天堂之門到底在那裏
- Spark 天堂之門源碼鑑賞
引言
我說的 Spark 天堂之門就是SparkContext,這篇文章會從 SparkContext 建立3大核心對象 TaskSchedulerImpl、DAGScheduler 和 SchedulerBackend 開始到註冊給 Master 這個過程當中的源碼鑑賞,SparkContext 是整個 Spark 程序通往集羣的惟一通道,它是程序起點,也是程序終點,因此我把它稱之爲天堂之門,看過 Spark HelloWorld 程序的朋友都知道,你在程序的開頭必需先定義SparkContext、接著調用 SparkContext 的方法,好比說 sc.textFile(file),最後也會調用 sc.stop( ) 來退出應用程序。如今咱們就來看看 SparkContext 裏面到底有什麼密碼,以及爲何它會被稱爲天堂之門。但願這篇文章能爲讀者帶出如下的啓發:編程
- 瞭解在 SparkContext 內部建立了那些實例對象以及如何建立
- 瞭解真正是那個實例對象向 Master 註冊以及如何註冊
什麼是 Spark 的天堂之門
- Spark 程序在運行的時候分爲 Driver 和 Executor 兩部分
- Spark 程序編寫是基於 SparkContext 的,具體來講包含兩方面
- Spark 編程的核心 基礎-RDD 是由 SparkContext 來最初建立的(第一個RDD必定是由 SparkContext 來建立的)
- Spark 程序的調度優化也是基於 SparkContext,首先進行調度優化。
- Spark 程序的註冊時經過 SparkContext 實例化時候生產的對象來完成的(實際上是 SchedulerBackend 來註冊程序)
- Spark 程序在運行的時候要經過 Cluster Manager 獲取具體的計算資源,計算資源獲取也是經過 SparkContext 產生的對象來申請的(實際上是 SchedulerBackend 來獲取計算資源的)
- SparkContext 崩潰或者結束的時候整個 Spark 程序也結束啦!
Spark 天堂之門到底在那裏
運行一個程序,你會看見 SparkContext 從程序開始到結束都有它的身影,SparkContext 是 Spark 應用程序的核心呀!大數據
[下圖是一個 HelloWord 應用程序在 IDEA 中的運行情況]優化
Spark 天堂之門源碼鑑賞
此次主要是看當提交Spark程序後,在 SparkContext 實例化的過程當中,裏面會建立多少個核心實例來爲應用程序完成註冊,SparkContext 最主要的是實例化 TaskSchedulerImpl。spa
[下圖是 SparkContext 在建立核心對象後的流程圖]
線程
- SparkContext 構建的頂級三大核心:DAGScheduler, TaskScheduler, SchedulerBackend,其中:
- DAGScheduler 是面向 Job 的 Stage 的高層調度器;
- TaskScheduler 是一個接口,是低層調度器,根據具體的 ClusterManager 的不一樣會有不一樣的實現,Standalone 模式下具體的實現 TaskSchedulerImpl;
- SchedulerBackend 是一個接口,根據具體的 ClusterManager 的不一樣會有不一樣的實現,Standalone 模式下具體的實現是SparkDeploySchedulerBackend
- 從整個程序運行的角度來講,SparkContext 包含四大核心對象:DAGScheduler, TaskScheduler, SchedulerBackend, MapOutputTrackerMaster
- SparkDeploySchedulerBackend 有三大核心功能:
- 負責與 Master 連接註冊當前程序 RegisterWithMaster
- 接收集羣中為當前應用程序而分配的計算資源 Executor 的註冊並管理 Executors;
- 負責發送 Task 到具體的 Executor 執行
補充說明的是 SparkDeploySchedulerBackend 是被 TaskSchedulerImpl 來管理的!scala
建立 SparkContext 的核心對象
總結
SparkContext 開啓了天堂之門:Spark 程序是經過 SparkContext 發佈到 Spark集羣的SparkContext 導演了天堂世界:Spark 程序運行都是在 SparkContext 爲核心的調度器的指揮下進行的:SparkContext 關閉了天堂之門:SparkContext 崩潰或者結束的是偶整個 Spark 程序也結束啦!對象
參考資料
資料來源來至 DT大數據夢工廠 大數據傳奇行動 第28課:Spark天堂之門解密視頻blog
Spark源碼圖片取自於 Spark 1.6.0版本