Spark基本概念與執行流程

來源:互聯網
上載者:User

Spark的基本概念:

(1)Application:表示你的應用程式

(2)Driver:表示main()函數,建立SparkContext。由SparkContext負責與ClusterManager通訊,進行資源的申請,任務的分配和監控等。程式執行完畢後關閉SparkContext

(3)Executor:某個Application運行在Worker節點上的一個進程,該進程負責運行某些task,並且負責將資料存在記憶體或者磁碟上。在Spark on Yarn模式下,其進程名稱為          CoarseGrainedExecutor Backend,一個CoarseGrainedExecutor Backend進程有且僅有一個executor對象,它負責將Task封裝成taskRunner,並從線程池中抽取出一個空閑線程運行Task,這樣,每個CoarseGrainedExecutorBackend能並行運行Task的資料就取決於分配給它的CPU的個數。

(4)Worker:叢集中可以運行Application代碼的節點。在Standalone模式中指的是通過slave檔案配置的worker節點,在Spark on Yarn模式中指的就是NodeManager節點。

(5)Task:在Executor進程中執行任務的工作單元,多個Task組成一個Stage

(6)Job:包含多個Task組成的並行計算,是由Action行為觸發的

(7)Stage:每個Job會被拆分很多組Task,作為一個TaskSet,其名稱為Stage

(8)DAGScheduler:根據Job構建基於Stage的DAG,並提交Stage給TaskScheduler,其劃分Stage的依據是RDD之間的依賴關係

(9)TaskScheduler:將TaskSet提交給Worker(叢集)運行,每個Executor運行什麼Task就是在此處分配的。


Spark的執行流程:

Spark在進行transformation計算的時候,不會觸發Job ,只有執行action操作的時候,才會觸發Job,在Driver中SparkContext根據RDD之間的依賴關聯建立出DAG有向非循環圖,DAGScheduler負責解析這個圖,解析時是以Shuffle為邊界,反向解析,構建stage。將多個任務根據依賴關係劃分為不同的Stage,將每個Stage的Taste Set 提交給TaskScheduler去執行,任務會在Executor進程的多個Task線程上執行,完成Task任務後 將結果資訊提交到ExecutorBackend中 他會將資訊提交給TaskScheduler。

TaskScheduler接到訊息後通知TaskManager,移除該Task任務,開始執行下一個任務。TaskScheduler同時會將資訊同步到TaskSet Manager中一份,全部任務執行完畢後TaskSet Manager將結果反饋給DAGScheduler,如果屬於ResultTask 會交給JobListener。否則話全部任務執行完畢後寫入資料。


Driver運行在Worker:

(1)用戶端提交作業給Master

(2)Master讓一個Worker啟動Driver,即SchedulerBackend。Worker建立一個DriverRunner線程,DriverRunner啟動SchedulerBackend線程。

(3)另外Master還會讓其餘Worker啟動Executor,即ExecutorBackend。Worker建立一個ExecutorRunner線程,ExecutorRunner會啟動ExecutorBackend進程。

(4)ExecutorBackend啟動後會向Driver的SchedulerBackend註冊,SchedulerBackend進程中包含DAGScheduler,ExecutorBackend向SchedulerBackend彙報的時候把TaskScheduler中的Task調度到ExecutorBackend執行。

(5)所有stage都完成後作業結束


Spark運行架構的特點:

每個Application擷取專屬的Executor進程,該進程在Application期間一直駐留,並以多線程方式運行tasks。這種Application隔離機制有其優勢,無論是從調度角度看(每個Driver調度它自己的任務),還是從運行角度看(來自不同Application的Task運行在不同的JVM中)。當前,這也意味著SparkApplication不能跨應用程式共用資料,除非將資料寫入到外部儲存系統。

提交SparkContext的Client應該靠近Worker節點(運行Executor)的節點,最好是在同一個Rack裡,因為SparkApplication運行過程中SparkContext和Executor之間有大量的資訊交換,如果想在遠程叢集中運行,最好使用RPC將SparkContext提交給叢集

 


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.