spark 運行架構





基本概念

*& RDD

是彈性分布式數據集,【我也不太清楚這個概念】。是一個分布式抽象內存的概念,提供了一種高度受限的共享內存模型【完成流運算,迭代運算,交互運算】

*& DAG

(有向無環圖)的簡稱。反映了RDD之間的依賴關系

*&Executor

是一個運行在worknode 上的一個進程。負責運行任務。并且為應用程序存取數據

*& 應用:

用戶編寫的Spark程序

*& 任務:

運行在Executor上的工作單元

*& 作業:

一個作業包含多個RDD和作用在相應RDD上的各種操作

*&階段:

是作業的基本調度單位。一個作業會分為多組任務,每組任務被稱為階段,或者被稱為任務集。

架構設計

?????????????? Spark運行架構包括集群資源管理器(cluster Manager)? 運行作業任務的工作節點(worknode),每個應用的任務的控制節點(driver)和在沒一個工作節點上負責具體執行任務的Executor 過程。


有圖有真相


Spark 采用excutor的優點

1.利用多線程來只選執行具體任務【Hadoop 是采用進程模型】來減少任務的啟動開銷

2.在executor中有一個BlockManger 存儲模塊。 會將內存和硬盤共同作為存儲設備,當需要進行迭代運時候,可以將中間結果存儲到這個模塊中,下次需要時候,直接讀取該存儲模塊中的數據,而不需要讀取HDFS中的數據,減少I/O操作;或者再交互式查詢場景下,預先將表緩存到該存儲模塊上,從而提高I/O性能。


spark運行架構

在Spark中一格應用有一個Driver節點和多個job作業組成,一個作業由多個階段【stage】組成,一個階段由多個task 組成。

當執行一個應用時候,clustermanger,申請資源,啟動Executor,并向Executor 發送文件和代碼。在Executor上執行任務,任務結束后,執行結果返回給Driver 或者寫入到HDFS.Hbase

自己畫的


原創

Spark執行流程

(1)當一個Spark應用被提交時,首先需要為這個應用構建起基本的運行環境,即由任務控制節點(Driver)創建一個SparkContext,由SparkContext負責和資源管理器(Cluster Manager)的通信以及進行資源的申請、任務的分配和監控等。SparkContext會向資源管理器注冊并申請運行Executor的資源;

(2)資源管理器為Executor分配資源,并啟動Executor進程,Executor運行情況將隨著“心跳”發送到資源管理器上;

(3)SparkContext根據RDD的依賴關系構建DAG圖,DAG圖提交給DAG調度器(DAGScheduler)進行解析,將DAG圖分解成多個“階段”(每個階段都是一個任務集),并且計算出各個階段之間的依賴關系,然后把一個個“任務集”提交給底層的任務調度器(TaskScheduler)進行處理;Executor向SparkContext申請任務,任務調度器將任務分發給Executor運行,同時,SparkContext將應用程序代碼發放給Executor;

(4)任務在Executor上運行,把執行結果反饋給任務調度器,然后反饋給DAG調度器,運行完畢后寫入數據并釋放所有資源。


原創

Spark 特點

(1)每個應用都有自己專屬的Executor進程,并且該進程在應用運行期間一直駐留。Executor進程以多線程的方式運行任務,減少了多進程任務頻繁的啟動開銷,使得任務執行變得非常高效和可靠;

(2)Spark運行過程與資源管理器無關,只要能夠獲取Executor進程并保持通信即可;

(3)Executor上有一個BlockManager存儲模塊,類似于鍵值存儲系統(把內存和磁盤共同作為存儲設備),在處理迭代計算任務時,不需要把中間結果寫入到HDFS等文件系統,而是直接放在這個存儲系統上,后續有需要時就可以直接讀取;在交互式查詢場景下,也可以把表提前緩存到這個存儲系統上,提高讀寫IO性能;

(4)任務采用了數據本地性和推測執行等優化機制。數據本地性是盡量將計算移到數據所在的節點上進行,即“計算向數據靠攏”,因為移動計算比移動數據所占的網絡資源要少得多。而且,Spark采用了延時調度機制,可以在更大的程度上實現執行過程優化。比如,擁有數據的節點當前正被其他的任務占用,那么,在這種情況下是否需要將數據移動到其他的空閑節點呢?答案是不一定。因為,如果經過預測發現當前節點結束當前任務的時間要比移動數據的時間還要少,那么,調度就會等待,直到當前節點可用。


體會:

????????? 要想了解架構,先把各個節點之間的關系弄清楚,誰包含誰,誰在誰上面運行。比如Spark包含一個控制節點,多個工作job節點,工作節點 又包含多個階段stage。階段又包含多個task .一個worknode 上有一個executor? 應用通過Driver 中的SparkConnect 告知cluster manager,cm 開始一系列的申請調度資源,啟動所有的executor,然后想executor發送代碼文件,在executor上執行,然后把執行結果返回給driver或者存到hbase中去.??
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容