Spark Core源碼分析--任務提交
本人能力有限,如果有說得不對的地方,請留言批評指正。
廢話不多說,直接進入正題。
我們在使用spark時,不管時spark Core、spark SQL還是spark streaming,通常會有一下三步:
(1)開始階段--提交任務
(2)任務執行中--任務提交
(3)任務結束,得到結果
1、任務提交
任務提交的方式有兩種:
一種是通過spark-shell的方式,
提交我們的命令,例如:spark-shell --master local[2],這樣就會啟動spark進入本地模式,並處於待命狀態。
另外一種方式是spark-submit的方式,
我們可以把代碼寫好,打包,通過spark-submit提交jar的形式運行spark。
總結:
上述兩種提交方式,其本質都是將觸發spark-class方法去執行spark任務,例如:
最終的任務提交順序是:spark-shell --> spark-submit --> spark-class --> sparksubmit.main --> sparkloop --> createSparkContext
2、createSparkContext
SparkContext是進行spark開發的主要介面,是spark上層應用和底層實現的中轉站。
創建sparkContext時,會涉及到一下幾點內容:
(1)SparkEnv
(2)DAGScheduler
(3)TaskScheduler
(4)SchedulerBackend
(5)WebUI
創建SparkContext之前,需要對上述參數做好配置(即:創建sparkConf,並設置相關的參數),通過sparkConf來創建sparkEnv。
我們可以看看sparkEnv的參數設置:
executorId: // executor ID
actorSystem: //akka通信
serializer: // 序列化
closureSerializer //閉包管理
cacheManager: //用於存儲中間計算結果
mapOutputTracker: //用來緩存Mapstatus信息,並可以從MapOutputMaster
shufflerManager // 路由維護表
broadcastManager: //廣播
connectManager: //網路連接管理器
securityManager: // 安全管理
httpfileServer: //文件存儲伺服器
sparkfilesDir: // 文件存儲目錄
metricsSystem: // 測量
conf // 配置文件
在sparkConf中設置好參數,就可以創建sparkContext,創建完sparkContext就會使用createTaskScheduler()方法創建TaskScheduler,進而創建DAGschedulern
在創建TaskScheduler之前,需要創建HeartbeatReceiver,因為Executor需要它去創建DAGscheduler。
// We need to register "HeartbeatReceiver" before "createTaskScheduler" because Executor willn// retrieve "HeartbeatReceiver" in the constructor. (SPARK-6640)n
// Create and start the schedulernval (sched, ts) = SparkContext.createTaskScheduler(this, master)n_schedulerBackend = schedn_taskScheduler = tsn_dagScheduler = new DAGScheduler(this)n_heartbeatReceiver.ask[Boolean](TaskSchedulerIsSet)n
在代碼提交的最後階段是啟動webUI。
推薦閱讀:
※矽谷之路 48: 深入淺出Spark(五)數據怎麼存
※Spark從1.4.x升級到1.6的喜人效果
※矽谷之路57:深入淺出Spark(八)如何處理實時數據
※深入淺出Spark(三)什麼是Standalone
TAG:Spark |