天天看點

Spark綜合學習筆記(二)Spark核心原理

一、依賴關系

Spark綜合學習筆記(二)Spark核心原理

寬依賴:有shuffle

子RDD的一個分區會依賴于父RDD的多個分區–錯誤

父EDD的一個分區會被子RDD的多個分區所依賴–正确

Spark綜合學習筆記(二)Spark核心原理

窄依賴:沒有shuffle

子RDD的一個分區會依賴于父RDD的1個分區–錯誤

父EDD的一個分區會被子RDD的1個分區所依賴–正确

Spark綜合學習筆記(二)Spark核心原理

為什麼要區分寬窄依賴

對窄依賴:并行化+容錯

寬依賴:進行階段劃分,(shuffle後的階段需要等待shuffle前的階段計算完才能執行)

Spark綜合學習筆記(二)Spark核心原理

二、DAG和Stage

DAG

Spark的DAG:就是spark任務/程式執行的流程圖

DAG的開始:從建立RDD開始

DAG的結束:到action結束

一個spark程式中有幾個Action操作就有幾個DAG

Spark綜合學習筆記(二)Spark核心原理

Stage

Spark綜合學習筆記(二)Spark核心原理

Stage:是DAG中根據shuffle劃分出來的階段!

前面的階段執行完才能執行後面的階段

如圖例:整個圖為DAG,根據shuffle劃分階段 左邊Stage1中有很多Task是并行運算的,不需要等待

也就是說同一個階段中的線程任務可以并行執行,無需等待

Spark綜合學習筆記(二)Spark核心原理

三、名詞解釋

在官網中

​​​http://spark.apache.org/docs/2.4.5/cluster-overview.html​​

其實有解釋,如圖所示,Spark Application執行時涵蓋的很多概念都有解釋

Spark綜合學習筆記(二)Spark核心原理

此處我們進行一個簡短的翻譯

1.Application:應用,就是程式員編寫的Spark代碼,如wordcount代碼
2.Driver:驅動程式,就是用來執行main方法的JVM程序,裡面會執行一些Drive端的代碼,如建立sparkcontext,設定應用名,設定日志級别...
3.sparkContext:Spark運作時的上下文環境,用來和c1usterManager進行通信的,并進行資源的申請、任務的配置設定和監控等
4.c1usterManager:叢集管理器,對于standalone模式,就是Master,對于Yarn模式就是ResourceManager /ApplicationMaster ,在叢集上做統一的資源管理的程序
5.worker :工作節點,是擁有CPU/記憶體等資源的機器,是真正幹活的節點
6.Executor:運作在worker中的VM程序!
7.RDD:彈性分布式資料集
8.DAG:有向無環圖,就是根據Action形成的RDD的執行流程圖---靜态的圖
9.Job:作業,按照DAG進行執行就形成了Job---按照圖動态的執行
10.stage: DAG中,根據shuffle依賴劃分出來的一個個的執行階段!
11.Task:一個分區上的一系列操作(pip1ine上的一系列流水線操作)就是一個Task,同一個Stage中的多個Task可以并行執行!(一個Task由一個線程執行),是以也可以這樣說:Task(線程)是運作在Executor(程序)中的最小機關!
12.Taskset:任務集,就是同一個stage中的各個Task組成的集合!      

結合官網中的圖進行了解

Spark綜合學習筆記(二)Spark核心原理

四、job送出執行流程

Spark綜合學習筆記(二)Spark核心原理

五、web-UI檢視

在執行個體中檢視,如圖所示,有5個job,由于job是的DAG的動态執行,是以理論上,有幾個job就有幾個DAG

Spark綜合學習筆記(二)Spark核心原理

點選其中一個job

Spark綜合學習筆記(二)Spark核心原理

檢視DAG

Spark綜合學習筆記(二)Spark核心原理

再打開一個job對應的DAG進行對比,發現多分割出了一部分,具體的原因是對應的算子shuffle-true即有shuffle就會分割

繼續閱讀