一、整體結構
1、 Application
每一次通過Spark-submit命令提交的Jar包,都可以看成一個Spark應用程序。它是集羣資源器調度的基本單位,一個應用程序對應一個驅動程序。
用戶程序,如計算PI的值,統計數據報表等
2、Driver Program
驅動程序就是執行了一個Spark Application的main函數和創建Spark Context的進程,它包含了這個application的全部代碼。
問題:Driver是跑在哪個節點上,對應到U服務呢?
3.Master節點
運行Master守護進程的集羣節點,管理整個集羣,一個集羣中,只有一個Active的Master節點。Master節點有兩個用途:一是應用程序的調度,對用戶提交的應用程序,進行執行先後順序的調度;二是資源調度,由於集羣的資源實際是指Worker節點上的計算和內存資源,因此Master節點是對Worker節點進行資源上的調度。
問題:和YARN有什麼關係?
4.Worker節點
運行Worker守護進程的集羣節點,是集羣資源的貢獻節點,一個Worker內部可以包含多個Executor。一個集羣中,Worker節點一般會有多個,並且受到Master節點的管理。
就是計算節點。
5.任務執行器(Executor)
Worker節點上執行任務的地方,一個Worker節點可能有多個Executor,每個Executor都擁有固定的核心數量和堆棧大小,並維護一個線程池,池中每一個線程用於執行一個任務。
問題:如何確定Executor個數?
具體實例:60臺計算節點,處理120Executor,平均每臺包含2個Excutor,可能也會有幾臺包含了3個,有些只包含一個。
在U服務中,固定分配Executor的CPU及內存資源,及1Cu,隊列包含了Cu個數;通過選擇隊列可指定Executor相關信息,如A隊列包含了3Cu,則會分配3個Executor。
問題:Excutor與task之間的關係?
6.作業(Job)
一個Action對應一個作業;
RDD數據的計算是惰性的,在遇到動作操作之前,RDD內部的數據不會真正的被計算。從第一個RDD到最後一個動作RDD這一整套計算流程,稱爲一個作業。一個Spark應用程序會包含多個作業,但作業之間是相互獨立的,因而僅靠了一個作業內部的調度過程即可。
7.階段(Stage)
計算鏈內從任意一個或多個連接在一起的RDD到末尾最後一個RDD(Final RDD)內部所有分區數據被計算出來時候的狀態,都可以視爲一個階段。Spark是根據Shuffle依賴來劃分階段,階段劃分後,RDD的計算鏈也被切斷。
問題:多個Stage是否能夠併發執行?
問題:shuffle是什麼?會做什麼?
8.任務集(Task Set)和任務(Task)
每一個階段內部包含多個可以併發執行的任務,這裏把同一個階段內的任務彙總在一起,稱爲一個任務集。任務集是DAG調度器交付給任務調度器的基本單位;
task是依據Partation進行劃分的,每個Partation對應一個task,一個任務可能包含了多個transfrom操作;
http://blog.csdn.net/zhumr/article/details/52518506
待續。。。。
4、stage是如何分解成task
二、RDD
1、RDD
三、shuffle
http://blog.csdn.net/zhumr/article/details/52540994
http://blog.csdn.net/hao707822882/article/details/40581515