溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

spark內核架構解密(13)

發(fā)布時間:2020-08-11 22:32:16 來源:網絡 閱讀:460 作者:lct19910210 欄目:大數據

 本期主要介紹下spark的內核架構。spark的應用程序總體來說,主要包括兩部分,一部分是Driver,其包括了SparkConf和SparkContext,另一部分就是Executor,運行具體的業(yè)務邏輯。

 應用程序的提交有兩種方式,

    1、Driver進程運行在客戶端,對應用程序進行監(jiān)控。

     2、主節(jié)點指定某個worker節(jié)點啟動Driver,負責整個應用的監(jiān)控。

 Driver一般運行在一臺專門用來提交spark程序的機器上,這臺機器一般一定和spark cluster在同樣的網絡環(huán)境中(因為Driver要頻繁的和Execuotr進行通信,實質上是CorarseGrainExecutorBackend),并且配置和普通的Worker節(jié)點一致??梢酝ㄟ^spark-submit去運行程序,與此同時可以指定運行的各種參數,例如memory、cores...。實際生產環(huán)境寫shell腳本自動化配置和提交程序,當然當前的機器一定安裝了Spark,只不過當前機器不屬于集群罷了。

 Driver的核心是SparkContext,而SparkContext依賴于SparkConf。SparkContext在初始化的時候會創(chuàng)建DAGScheduler、TaskScheduler、SchedulerBackend。

  在實例化的過程中回向Master注冊應用程序,Master接受注冊,如果沒有問題,Master會為當前的應用程序分配AppId并分配計算資源。Master接受用戶提交的程序并給Worker發(fā)送指令為當前的應用程序分配計算資源。每個Worker節(jié)點默認情況下為當前的程序分配一個Executor,在Executor中通過線程池并發(fā)執(zhí)行。Worker節(jié)點收到Master發(fā)送的LaunchExecutor指令后,會創(chuàng)建ExecutorRunner實例,并調用start方法,來啟動CoarseGrainExecutorBackend進程。CoarseGrainExecutorBackend進程里有Executor,并且CoarseGrainExecutorBackend和Executor是一一對應的。Executor內部會維護一個線程池,實際工作的時候,通過TaskRunner來封裝task,然后從ThreadPool獲取一條線程執(zhí)行task,執(zhí)行完后,線程會被回收復用。

 在spark中,Transformation操作是延遲計算的,當有action算子時才會觸發(fā)job。SparkContext會通過DAGScheduler把job中的RDD構成的DAG劃分成不同的stage,每個stage內部都是一系列業(yè)務邏輯完全相同但是處理數據不同的Tasks,構成TaskSet。

 TaskScheduler和SchedulerBackend負責具體的task的執(zhí)行(遵循數據本地性)。

 一個應用程序有可能包含多個stage,最后一個Stage中的Task稱為ResultTask,產生job結果。其他前面的Stage中的Task都稱為ShuffleMapTask,作為下一個Stage的數據輸入,相當與MapReduce中的Mapper。

 整個Spark程序的運行,就是DAGScheduler把job劃分成不同的Stage,提交TaskSet給TaskScheduler,進而提交給Executor執(zhí)行(符合數據本地性),每個Task會計算RDD中的一個Partition,基于該Partition來具體執(zhí)行我們定義的一系列同一個Stage內部的函數,以此輪推...直到整個程序運行完成。




向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI