1.Master(standalone):資源管理的主節點(進程)管理Worker
2.Cluster Manager:在集群上獲取資源的外部服務(例如:standalone Mesos Yarn)
3.Worker Node(standalone):1.管理本地的core和memory資源2.啟動Executor
4.Application:基于Spark的用戶程序,說白了就是寫的每一段代碼。
5.Job:包含很多任務(Task)的并行計算,可以看作和action算子對應。
6.Stage:一個job會被拆 分成很多組任務,每一組任務被稱為Stage,拆分的標準就是RDD的依賴關系。
7.Task:thread處理任務的單元。就是被拆分出的每一個任務,他是被送到某個Executor上的工作單元。
8.Driver:驅動進程.分發task2.回收task處理結果
在資源層面(從上往下)
Master:主節點
worker:由master管理
Executor:(進程)在worker上啟動
Threadpool:(線程池)每一個Executor中都有,在里面可以運行Task
從任務層面(從上往下)
Application:基于Spark的用戶程序,說白了就是寫的每一段代碼
Job:每一個Application里由很多Job,Job的個數由Application決定
Stage:根據RDD的依賴關系切割成每一個Stage
Task:(線程)Stage切割成一組Task。一組Task組成Stage
每一個Task發動到Threadpool中執行,這樣任務層面和資源層面就結合起來了。
Pipeline計算模式
這個Stage的并行度是3。Stage的并行度是由最后一個RDD的Partition個數決定的。Partition個數是由數據量的大小決定的。
RDD1到RDD3都是窄依賴,沒有發生shuffle因此是一個Stage。
每一個RDD的Partititon執行算子
每一個task的計算邏輯是所有的Partition的計算邏輯以遞歸函數的展開式的形式整和起來的
task0:fun3(fun2(textfile(block1)))
task1:fun3(fun2(textfile(block2)))
task2:fun3(fun2(textfile(block3)))
RDD是不存儲數據的,它只是一個抽象的概念,RDD只是存儲了計算邏輯
因此
task0最好發送到對應b1所在的節點
task1最好發送到對應b2所在的節點
task2最好發送到對應b3所在的節點